front inserters and back inserters在deque中,vector的区别
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()失效。这里为什么没有失效????
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尺寸加倍。
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,会直接蹦出异常来。