front inserters and back inserters在deque中,vector的区别解决方法
front inserters and back inserters在deque中,vector的区别
以下是back inserters 在vector中的用法, 迭代器失效了
为什么在deque中迭代器没有失效,在vector中失效
------解决方案--------------------
http://www.cplusplus.com/reference/std/iterator/front_insert_iterator/[/url]
这个网站的资料不错,你可以经常看看
我的编译器输出是正常的,你的用法都是标准用法没有问题
输出结果是:
- 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 3 1 2 3 44 45 1 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 3 1 2 3 44 45 1 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,会直接蹦出异常来。