容器保存元素类型的限制
如果元素的类型没有自己的默认构造函数,初始化时要提供元素初始化器

迭代器
除forward_list容器不支持迭代器递减运算以外,其他容器都支持迭代器的递增、递减、解引用、等于判断、箭头运算
有的支持比较运算,有的不支持

容器定义和初始化
除array外,其他容器会执行默认初始化
array不支持使用两个迭代器作为形参初始化
顺序容器可以接受大小参数进行初始化,这种情况下不给出初始化值会进行值初始化
直接拷贝初始化要求容器和元素类型相同,使用迭代器拷贝可以进行类型转换
初始化array时,除了要有元素类型,还需要说明大小,array支持拷贝和赋值(这是相比内置数组的进步地方)

顺序容器使用assign
assign是顺序容器(除了array)的一个成员,可以在相容类型的容器下赋值,用指定的数据的拷贝赋值给新容器
list<string> names;
vector<const char*> oldstyle;
names = oldstyles;//错误,使用等号需要类型相同
names.assign(oldstyle.cbegin(),oldstyle.cend());
注意:由于原容器的元素被替换,所以不能用原容器的一部分赋值给原容器,因为传递过去的迭代器不能适应调用assign的容器的改变
第二个版本传递元素值和个数,进行相同元素的赋值

使用swap
除array外,swap不会进行任何插入删除拷贝操作,只是进行替换。除string外,原来的迭代器不会失效,但是指向的容器发生了变化
对于array,会真正交换他们的元素,指针引用迭代器绑定的元素不变,但是元素值发生了变化