数据结构
Stl 概述
1、标准模板库
作用:提高同用算法的高效实现,省时,安全。
2、三大组键
容器 :存储数据
分类 :序列式容器:vector list 关联试容器: map set
特点 : 封装(相对安全) 全是深拷贝
算法: 容器初始化、排序、插入、删除(提供操作)
迭代器: 遍历容器(遍历数组) 模拟指针(不同迭代器不可混用) ++ -- *等
#include<string>
string st ="hello world";
st.puah_back( ' a '); //在尾部插入 a
st.compare(" hello world ") //比较字符串函数 compare
一、 Stl的优缺点
优:开发效率高,相对安全
代码可读性强,算法优秀
封装了流行的数据结构和算法
缺:是模板,提供通用方法(某些方向不完美) Cstring 一些库,没有合适的库
Vector 动态数组
优:省内存,随机访问方便
缺:插入,删除不方便 重分佩内存要逐个拷贝
List 链表(双向循环链表)
优:插入,删除效率高,合并方便
缺: 随机存储,查找不方便,比vector费内存
deque (数组+链表)
优:两端插入,删除比较方便,访问较方便。
缺:比vector更费内存
特点:vector+list 优缺点折中
map set 二叉数(红黑树)
优:方便查找(已序)
缺:插入,删除代价高
重点:
1、容器不同实现,不同设计目的,不同特性选场合
2、提高程序效率,选合适的数据结构
3、每种容器对应的数据结构
vector类:
eg: vector < int >vec; //定义vector 类型是 int的
vec.push_back ( );//在后面插入一个数据
list< int > lis;
lis.pop_back ( );//在后面删除一个数据
push 压栈 pop 出栈
vec.assign(10,1)//初始化10个1 assign({1,2,3,4,5,6,7});//初始化数组
for(auto S :vec)
{
cout<< S <<endl; //打印10个1 ( cout << vec.at (数组下标) << endl; )
}
vec . at(8) 返回一个元素的引用(通过下标)超过范围就会异常
vec.size()求当前元素个数
vec.capacity() 当前最多存放多少个元素
vec.max_size() 最多能申请的大小
for(auto S::vec) //遍历所有元素
{
cout << S << endl;
}
迭代器模拟的是指针 (类似于指针)
auot it =vec.begin();//返回第一个元素
for( ; it!=vec.end(); it++)
{
cout << *it <<endl;
}
begin 是第一个地址中的元素 rend是动态数组第一个地址前的一个数 end是超尾 rbegin 是数组最后的一个数
#include<algorithm> //算法
sort ( vec.begin() , vec.end() ); //两个迭代器
for(auto it=vec.begin() ; it!=vec.end(); it++) it 是is_max (bod is_max(int a,int b) { return a>b; })
{
cout << *it <<endl;
}

浙公网安备 33010602011771号