上接第三章:http://blog.csdn.net/liyangguang1988/article/details/8858776
标准库定义三种顺序容器类型和三种容器适配器:
vector 支持快速随机访问
list 支持快速插入/删除
deque 双端队列 ( double-ended queue)
顺序容器适配器:
stack
queue
priority_queue 有优先级管理的队列
容器元素初始化:
C<T> c; 创建名为 c 的空容器。C 为容器类型。 适用于所有容器。
C c(c2); 创建容器c2的副本c.c2, c 相同容器类型,存放相同类型元素. 适用于所有容器
C c(b,e); c的元素是迭代器 b 和 e(不含*e) 标示的范围内元素的副本。适用于所有容器
C c(n, t); 用 n 个值为 t 的元素创建容器c.只适用于顺序容器。
C c(n); 创建有 n 个值初始化元素的容器 c.只适用于顺序容器
容器的赋值和容器的容器:
int main()
{
/***************************** in5itially *******************************/
char *words[]={"stately","plump","buck","mulligan"};
size_t words_size=sizeof(words)/4;
list<string> words2(words,words+4);// 1st,适用于迭代器赋值,初始化一段元素副本.
for(list<string>::iterator it=words2.begin();it!=words2.end();++it)
cout<<*it<<endl;
const vector<string>::size_type list_size=64;
list<string>slist(list_size,"eh?"); //2nd
list<int>ilist(64);//2nd
list<int> ilist2;//3rd
ilist2.push_back(128);
list<string>slist2(slist);//4th 拷贝构造函数.
/*******************************容器的容器***************************/
deque<int> ival[10];
for(int i=0;i<10;++i)
{
ival[i].push_back(28);
ival[i].push_front(27);
}
list<deque<int> >ilist3;
for(int it1=0;it1!=10;++it1)
{
ilist3.push_back(ival[it1]);
}
for(list<deque<int> >::iterator iter1=ilist3.begin();iter1!=ilist3.end();++iter1)
{
for(deque<int>::iterator iter2=(*iter1).begin();iter2!=iter1->end();++iter2)
cout<<*iter2<<" ";
cout<<endl;
}
迭代器(iterator)的操作:
所有标准库容器类型支持:
*iter iter->item ++iter iter++ --iter iter-- iter1!=iter2 iter1==iter2
仅 vector 和 deque 容器支持的操作:
iter + n iter - n iter1 += iter2 iter1 -= iter2 >,>=,<,<=
三种插入:
char *words[]={"stately","plump","buck","mulligan"};
list<string> ilist2;
list<string>::iterator iter=ilist2.begin();
string word;
while(cin>>word)
iter=ilist2.insert(iter,word);// insert1
ilist2.insert(iter,5,"hello");//insert 2
ilist2.insert(iter,words,words+2);//insert 3
iter=ilist2.begin();
while(iter!=ilist2.end())
{
cout<<*iter<<endl;
++it
insert 和 push 操作 vector 或 deque 时可能导致迭代器失效,程序必须保证迭代器每次循环后得到更新。