标题:下面的一段代码是为了验证insert对deque和vector的影响,可是出来的结果让我 ...
只看楼主
纯黑色
Rank: 1
等 级:新手上路
帖 子:347
专家分:0
注 册:2009-4-16
结帖率:91.43%
已结贴  问题点数:20 回复次数:4 
下面的一段代码是为了验证insert对deque和vector的影响,可是出来的结果让我不是很理解,求解释!
程序代码:
#include <vector>
#include <deque>
#include <iostream>
using namespace std;

int main ()
{


        char str[] = "fuckyou";
        vector<char> v1(&str[0],&str[sizeof(str)]);
        deque<char> q1(&str[0],&str[sizeof(str)]);

        vector <char>::iterator vitr=v1.begin();
        cout<<*(vitr)<<endl;
        v1.insert(v1.begin()+2,'a');
        cout<<*(vitr)<<endl;//我不明白这一行的输出结果,求解释。

        cout<<"-----------------------"<<endl;
        deque <char>::iterator qitr=q1.begin();
        cout<<*(qitr)<<endl;
        q1.insert(q1.begin()+2,'a');
        cout<<*(qitr)<<endl;
        return 0;
}

编译环境:centos g++

结果:
f
(空)//这块为什么不输出?
-----------------------
f
u
搜索更多相关主题的帖子: color insert 影响 
2014-01-25 12:59
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
得分:0 
vector::insert
Iterator validity
If a reallocation happens, all iterators, pointers and references related to the container are invalidated.
Otherwise, only those pointing to position and beyond are invalidated, with all iterators, pointers and references to elements before position guaranteed to keep referring to the same elements they were referring to before the call.

离恨恰如春草,更行更远还生。
2014-01-25 14:01
纯黑色
Rank: 1
等 级:新手上路
帖 子:347
专家分:0
注 册:2009-4-16
得分:0 
回复 2楼 玩出来的代码
就是说在这个例子中,vector reallocate了 对吗?
2014-01-25 16:17
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
//v1.reserve( 20 ); 加上这一句可以确保不发生reallocation
        vector <char>::iterator vitr=v1.begin();
        cout<<*(vitr)<<endl;
size_t s1 = v1.capacity();
        v1.insert(v1.begin()+2,'a');
size_t s2 = v1.capacity();
if( s2 != s1 ) cout << "reallocated" << endl; 通过判断前后的capacity()才判断是否reallocate了
2014-01-25 16:26
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
得分:0 
这个例子不管有没有reallocate, 你的使用方法都与insert的本意表现不一致。

This causes an automatic reallocation of the allocated storage space if -and only if- the new vector size surpasses the current vector capacity.

离恨恰如春草,更行更远还生。
2014-01-25 17:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-426845-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032179 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved