各位,今天调试一个程序时发现了一个奇怪的现象(尽量把代码写出来方便大家复制去自己机子上调试)://首先我建立了一个int型的vector容器并初始化为: 1 1 2 2 3 3 4 4 5 5 vector<int> v_int;for(vector<int>::size_type i=1;i<=5;++i){v_int.push_back(i);v_int.push_back(i);}//然后再将容器size扩展为15,并在末尾加入5个值为3的元素v_int.resize(15,3);//最后,问题来了:vector<int>::iterator end_unique;end_unique = unique(v_int.begin(),v_int.end());//筛选出无重复的序列v_int.erase(end_unique,v_int.end());//擦除剩余重复元素for(iter=v_int.begin();iter!=v_int.end();)//输出{cout <<*iter++<<" ";}输出的序列竟然不是期望的1 2 3 4 5,而是1 2 3 4 5 3!!也就是说,unique函数没有把重复的那个元素3去除掉本来正常情况下,如果调用unique后不erase剩下那些重复的元素,序列应该是这样的:1 2 3 4 5 3 4 4 5 5 3 3 3 3 3 (无重复的序列为1 2 3 4 5)而unique_end应该指向超出无重复元素范围的下一位置,也就是第六个元素3但是如果你cout<<*unique_end会惊奇地发现居然是指向4!!而且更神奇的是,如果在一开始初始化v_int时增多或减少一条v_int.push_back(i)语句,也就是把序列改为1 2 3 4 5 3 3 3 3 3 或1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 3 3 3 3 3那么输出就没有任何问题了,都是1 2 3 4 5(后面不会奇怪地多出个3)纠结了我一个早上啊TMD,百思不得其解
- 2 回答
- 0 关注
- 70 浏览
添加回答
举报
0/150
提交
取消