标准库定义了三种顺序容器:vector,list,deque;同时标准库还提供了三种容器适配器(adaptor),适配器是根据原始的容器类型所提供的操作,通过定义新的操作接口,来适应基础的容器类型。顺序容器适配器包括stack、queue、priority_queue类型。
1.利用迭代器来进行元素的传递
利用迭代器来进行传递的时候,不要求容器类型相同。容器内的元素类型也可以不相同,只要他们相互兼容就可以,能够将要复制的元素转换为所构建的新容器的元素类型,即可以实现复制。
eg: list<string> slist(svec.begin(),svec.end()); vector<string>::iterator mid=svec.begin()+svec.size()/2; deque<string> front(svec.begin(),mid);
2.允许通过使用内置数组中的一对指针初始化容器
char *words[]={"stately","plump","buck","mulligan"};size_t words_size=sizeof(words)/sizeof(char *);list<string> words2(words,words+words_size);
3.迭代器和迭代器的范围
3.1 迭代器提供前置和后置的自增和自减运算以及相等不相等的运算
3.2 vector deque容器支持额外的迭代器算术运算和关系操作符(两个迭代器指向同一个容器)
iter (+/-)n iter1-iter2 >,>=,<,<=
因为只有这两种容器为其元素提供快速、随机的访问。
3.3 容器定义的类型别名
value_type:元素类型 ;reference: 元素的左值类型,是value_type&的同义词;
4.如何选择一个合适的顺序容器
如果无法确定某种应用应该采用哪种容器时,则编写代码时尝试只使用vector和list容器提供的操作,使用迭代器而不是下标,并且避免随机访问元素。这样可以很方便将程序从vector容器修改为使用list容器。
5.容器适配器
适配器相当于一个转化器,让一种已经存在的容器类型采用另一种不同的抽象类型的工作方式实现
顺序容器适配器:queue,priority_queue,stack
stack栈可以建立在vector,list或者deque容器上。默认的stack基于deque容器上实现。
queue适配器要求其关联的基础容器必须提供push_front运算。
priority_queue适配器要求提供随机访问功能,建立在vector或deque容器上,默认在vector容器上。