顺序性容器:
- vector 从后面快速的插入和删除,直接访问任何元素(随机访问)
- deque 从前面或后面快速的插入和删除,直接访问任何元素(随机访问)
- list 双链表,从任何地方插入和删除
关联容器:
- set 快速查找,不允许重复值。
- multiset 快速查找,允许重复值。
- map 一对多映射,基于关键字快速查找,不允许重复值。
- multimap 一对多映射,基于关键字快速查找,允许重复值。
容器适配器:
- stack 后进先出(栈)
- queue 先进先出(队列)
- priority queue 优先级最高的先出列
vector(向量容器)
线性顺序结构,相当于动态数组。
创建后会自动在内存分配一块连续的空间进行存储,大小也可以预先指定(capacity()返回这个大小)。当大小超过预分配的空间时会重新申请一块内存,但是这样的分配很耗时间(所以预先考虑需要的大小能节省时间),重新分配空间时会做如下操作:
- 首先申请一块更大的内存
- 然后将原来的数据拷贝到新的内存块中。
- 其次销毁原来内存块中的对象。(析构)
- 最后将原来的空间释放。
所以,如果原来的数据量很大,这样的操作会导致很糟糕的性能。虽然是动态数组,但是预先知道数据的大小才能最好的发挥vector的性能。
特点:
- 动态扩展
- 随机访问
- 节省空间(连续存储,大碎片少)
- 内部插入删除的效率低(顺序表)
- 只能在尾部push,pop
- 预先分配适合的大小才能使性能最优
构造函数
vector<int> v1 //一个空的vector
vector<int> v2(5,1)//大小为5值为1的vector
进行赋值或比较
==, !=, <=, >=, <, >
访问某个特定位置 => []
如果两个vector相等:
-则两个vector容量相等
-相同位置的元素相等
比较按照词典规则
assign()对元素赋值
//将[start,end)的元素复制到当前vector
void assign(input_iterator start,input_iterator end);
//赋num个值为value的元素到vector中,会清除掉vector之前的内容
void assign(size_type num, const type &val)
at()返回指定位置元素
//和v[i]差不多,但是比v[i]安全
TYPE at(size_type loc);
back()返回最后一个元素
begin()返回第一个元素的迭代器
clear()清空所有元素
empty()判断是否为空
end()返回最后一个元素的迭代器(指向最后一个元素的下一位置)
erase()删除指定元素
//删除loc处元素
erase(iterator loc);
//删除start和end之间的元素
erase(iterator start,iterator end);
front();返回第一个元素的引用
get_allocator();返回vector的内存分配器
insert()插入元素
//在loc前插入val,返回这个元素的迭代器
insert(iterator loc ,const TYPE &val);
//在loc前插入Num个值为val的元素
insert(iterator loc,size_type num,const TYPE &val);
//在loc前插入[start,end)内所有元素
insert(iterator loc,iterator start,iterator end);
max_size() 返回容纳元素数量上限
pop_back()移除最后一个元素
push_back()在末尾插入元素
rbegin()尾部逆迭代器
rend()头部逆迭代器
reserve()设置最小容纳空间(类似初始化吧。。)
resize()改变大小
size()返回大小
swap()交换vector
时间: 2024-10-30 07:43:44