首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

front inserters and back inserters在deque中,vector的区别解决方法

2012-03-28 
front insertersand back inserters在deque中,vector的区别C/C++ codedequeintqfront_insert_iterator

front inserters and back inserters在deque中,vector的区别

C/C++ code
deque<int>q;    front_insert_iterator<deque<int>> iter(q);    *iter=12;    *iter=23;    *iter=1782;    *iter=72223;            copy(q.begin(),q.end(),ostream_iterator<int>(cout," ")); //打印结果逆序    cout<<endl;    copy(q.begin(),q.end(),front_inserter(q));    copy(q.begin(),q.end(),ostream_iterator<int>(cout," ")); //第三个参数是destniation    cout<<endl;将q中的72223 1782 23 12  以逆序插入到 front_inserter(q)中,方式是逆序所以结果最终为:12 23 1782 72223 72223 1782 23 12由于deque 最终没有足够的空间,插入逆序插入过程中,空间不断变化,很可能导致q.begin(),q.end()失效。这里为什么没有失效????



以下是back inserters 在vector中的用法, 迭代器失效了

C/C++ code
vector<int> coll;  back_insert_iterator<vector<int>> iter(coll);  *iter=1;  iter++;  *iter=2;  iter++;  *iter=3;  copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," "));  cout<<endl;  back_inserter(coll)=44;  back_inserter(coll)=45;   copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," "));  cout<<endl; copy(coll.begin(),coll.end(),back_inserter(coll));//这里是不是造成,出现随机数的原因????   copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," "));  cout<<endl;运行结果为:1 2 31 2 3 44 451 2 3 44 45 1 2 -572662307 -572662307 -572662307请按任意键继续. . .copy(coll.begin(),coll.end(),back_inserter(coll)); 调用之前,coll的尺寸不变,back_inserter后,coll尺寸加倍。


为什么在deque中迭代器没有失效,在vector中失效



[解决办法]
http://www.cplusplus.com/reference/std/iterator/front_insert_iterator/[/url]
这个网站的资料不错,你可以经常看看
我的编译器输出是正常的,你的用法都是标准用法没有问题
输出结果是:
C/C++ code
1 2 31 2 3 44 451 2 3 44 45 1 2 3 44 45
[解决办法]
deque的一般实现是链表连顺序表
比如插入之前有如下值
1-2-3-4
插入之后是
5-6-7-8 ~ 1-2-3-4
在1的前面另外开辟了一段空间存放5678,1本身的位置没动
[解决办法]
用vs2010,会直接蹦出异常来。

热点排行