容器适配器


关于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 按键值升序排列