顺序容器:
1.forward_list(单链表,单向顺序访问) 和 array 是新加入的类型。
2.迭代器:在之前的版本中,我们如果需要一个const_iterator 那么我们只能这样写: Container<T>::const_iterator,到了c++11,我们就可以直接这样写:c.cbegin()这个函数返回的是指向容器的第一个元素的const迭代器(底层const)。 c++11
3.容器初始化:拷贝构造,有赋值,初始化列表(c++11),迭代器初始化,(个数,初始化值)。5种初始化方法。
4.初始化列表:这个就类似于声明一个数组:
int a[5] = {1,2,3,4,5};
std::vector<int> arr = {1,2,3,4,5};
这两条语句都声明了长度为5,元素类型为int,且元素值都为1,2,3,4,5的两个数组,两者的区别就不需要解释了,重点在于下面一条语句,在c++之前的版本,我们假如要用数组来初始化vector的话, 那么就只能这样写:
int a[] = {1,2,3,4,5};
int size = sizeof(a)/sizeof(int);
std::vector<int> arr(a,a+size);
通过这样的方法,我们就把一个数组转化为vector,但是相对于第一段代码中的初始化,第一段还是比较容易理解的。 c++11
5.标准库的array:声明一个标准库的数组,我们要这么写:
array<type,size> a = {1,2,3,5,6};
必须包含元素的类型和数组的大小,缺一不可,标准库的array的好处就是重载了=操作符,我们可以使用=操作符来完成对于相同元素类型的数组的赋值操作:
array<int,5> a = {0}; //相当于 {0,0,0,0,0};
array<int,5> b = a;
但是在使用=操作符的时候,我们必须要保证元素的类型和数组的大小必须相同。 c++11
6.swap函数:在常数时间内可以完成两个相同类型的容器(元素类型相同),元素的互换,不会导致迭代器,引用,指针失效。在早期的版本中,标准库只提供成员函数版本的swap,但是现在的标准库提供了非成员函数的swap,我们应该尽量使用后者。 c++11
7.insert:在新标准下,接受元素个数或者范围的insert版本返回指向第一个新加入元素迭代器。(就版本的标准库,这些操作返回void),如果范围为空,或者不插入任何元素,那么insert就会把第一个参数返回。 c++11
8.emplace:emplace_front,emplace,emplace_back这三个函数的作用对应于push_front,insert,push_back.区别:emplace版本是把传入的参数传给保存元素的类型的构造函数,然后直接在容器管理的内存空间中直接创建对象,但是假如调用push_back的时候,我们必须显式地调用保存元素的类型的构造函数,并且会产生一个临时对象,但是implace就不会有临时对象的产生。 c++11