第九章:顺序容器

上接第三章: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 时可能导致迭代器失效,程序必须保证迭代器每次循环后得到更新。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值