一、容器总结
1、std::array
std::array跟数组并没有太大区别,std::array相对于数组,增加了迭代器等函数。
2、std::forward_list
std::forward_list为从++新增的线性表,与list区别在于它是单向链表。我们在学习数据结构的时候都知道,链表在对数据进行插入和删除是比顺序存储的线性表有优势,因此在插入和删除操作频繁的应用场景中,使用list和forward_list比使用array、vector和deque效率要高很多。
3、std::unordered_map
std::unordered_map与std::map用法基本差不多,但STL在内部实现上有很大不同,std::map使用的数据结构为二叉树,而std::unordered_map内部是哈希表的实现方式,哈希map理论上查找效率为O(1)。但在存储效率上,哈希map需要增加哈希表的内存开销。
4、std::unordered_set
std::unordered_set的数据存储结构也是哈希表的方式结构,除此之外,std::unordered_set在插入时不会自动排序,这都是std::set表现不同的地方。
5、tuple
tuple是C++ 11新的标准库之一,其表示N元数组,它相当于有N个成员的结构体,只不过这个结构体的成员都是匿名的。tuple是类似于pair的模板,tuple像是pair的泛化版本,pair只能存放两个成员,而tuple则可以多个成员,相同的是,pair和tuple都允许其成员的类型不一样。
tuple的用途:tuple的最常见的用途就是作为函数的返回值,利用它,可以实现函数返回多个值。(虽然C++通过结构体也可以实现返回多个值的能力,但是相对tuple来说会更繁琐一些。)

二、容器操作总结
7、emplace
作用于容器,区别于push、insert等,如push_back是在容器尾部追加一个容器类型对象,emplace_back是构造1个新对象并追加在容器尾部
对于标准类型没有变化,如std:;vector,push_back和emplace_back效果一样
如自定义类型class A,A的构造函数接收一个int型参数,那么对于push_back需要是:

std::vector<A> vec;
A a(10);
vec.push_back(a);
对于emplace_back则是:
std::vector<A> vec;
vec.emplace_back(10);

改进点是什么?改进点:避免无用临时变量。比如上面例子中的那个a变量。

8、shrink_to_fit
这个改进还是有点意义的,日常程序应该能减少不少无意义的内存空间占用
push、insert这类操作会触发容器的capacity,即预留内存的扩大,实际开发时往往这些扩大的区域并没有用途。