容器适配器
关于emplace
,在C++11中值得说明的是:
容器的插入操作会涉及到两次构造,首先是临时对象的初始化构造;接着在插入的时候复制一次,会触发拷贝构造;最后释放临时对象。但是很多时候我们并不需要两次构造带来效率的浪费,希望在插入时直接构造。C++11标准已经新增了emplace语法来提升效率。容器的emplace类似insert,emplace_back类似push_back,在开发过程中应该尽量使用
emplace/emplace_back
进行插入。
顺序容器
关于clear
,值得说明的是:
- clear是从容器中擦除所有元素,但所申请的内存不会释放,即capacity() 不变。
- 可使用
vector<T>().swap(x)
完成释放内存的操作,原理是生成一个空的 vector 容器,通过交换函数swap,使得x离开其自身的作用域,从而强制释放所占的内存空间。- 也可使用
vector<T>(x).swap(x)
,等效于shrink_to_fit
,去除多余容量。
关联容器
- 只能用迭代器 (不断用变量值来递推新值,相当于指针) 操作元素,不支持使用下标运算符;
- 插入或删除操作后迭代器不会失效,指向被删除节点的迭代器失效;无序关联容器另作讨论;
- set/multiset 元素升序排列;map/multimap 按键值升序排列