c++ 容器相关
所有容器都支持的操作(不支持的括号会写)
arrary
- 元素类型和大小都是arrary类型的一部分
- arrayy<int, 10> digits = {0, 1,…}
- array与内置数组不同,是可以拷贝操作,可以对象赋值操作(要求容器类型及大小都相同)
- 不可以将一个花括号列表赋值给array
- array不支持assign
assign
向顺序容器中添加元素的操作
- insert函数将元素插入到迭代器所指定的位置之前
- vector list deque都支持insert成员(注意插入到任何位置都是合法的,例如可以使用insert完成vector没有的push_front操作,但是会很耗时),forward_list提供特殊版本的insert成员。
list<string> lst;
string word;
auto iter = lst.begin();
while (cin >> word)
iter = lst.insert(iter, word);//insert 等效 push_fornt
- 给insert传一对迭代器,它们不能指向添加元素的目标容器(不能传自身的迭代器)。
- C++11 insert操作返回指向第一个新加入元素的迭代器,如果范围为空,不插入任何元素返回第一个参数,旧版本返回void。
emplace\emplace_back\emplace_front
- C++11 新特性对标insert\push_back\push_front
-当调用push或insert成员函数时,是将元素类型的对象传递给它们,这些对象被拷贝到容器中。
而当调用emplace成员函数时,则是将参数传递给元素类型的构造函数emplace成员使用这些参数在容器管理的内存空间中直接构造元素。
例如
- emplace函数在容器中直接构造元素,传递给emplace的参数必须与元素类型的构造函数相匹配。
访问元素
- front 每个顺序容器都有,包括array
- forward_list 没有 back, forward_list的迭代器不能递减–
- at操作适用于 string vector deque array
- 在调用front back之前要先判断容器是否为空
- front back at 返回其实都是引用
删除操作
改变容器大小与容器容量管理
-
risize 是改变容器大小,reserve是用于分配空间(用于我们通知容器应该保存多少元素)
-
reserve和capacity只适用于vector和string
-
reserve比当前capacity小时,则什么也不做。
-
C++11 shrink_to_fit要求deque\vector\string退回不需要的内存空间,但是具体的实现可以选择忽略此请求,也就是说调用该函数也不保证一定退回内存空间。
capacity与size
- size指的是容器已经保存的元素个数
- capacity表示在不分配新的内存空间的前提下,该容器最多可以保存多少元素。
string
- 新标准引入 to_string\ stod
容器适配器 stack\queue\priority_queue
- 1、默认情况下,stack和queue是基于deque实现的,priority_queue是基于vector实现的。
- 2、stack只要求push_back、pop_back、back操作,除了arrary、forward_list之外的容易类型都可以来构造,一般默认基于deque,也可以在list或vector之上实现。
- 3、queue要求back、push_back、front、push_front,不能基于vector构造
- 4、priority_queue除了front\push_back\pop_back之外还要求随机访问的能力,所以可以在vector或deque上构造。但不能基于List构造。默认有<确定相对优先级。