C++标准模板库_note(1)

顺序性容器:

  • 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

你可能感兴趣的:(C语言)