永发信息网

C++ 向量 迭代器不能增减?????

答案:2  悬赏:60  手机版
解决时间 2021-03-05 09:45
  • 提问者网友:書生途
  • 2021-03-04 22:24
vector ::iterator vi;
vector ::iterator p;
for (vi=in_vec.begin(),p=in_vec.begin(); p!=in_vec.end()-1;p++)
{
if (*(++vi)==*p)
{
in_vec.erase(vi);
p--;
vi--;
}
}
最佳答案
  • 五星知识达人网友:逃夭
  • 2021-03-04 23:44
可以++或者--,不过你的vi初始化是不是搞错了啊,是不是应该vi=in_vec.end();如果是vi=in_vec.begin(),那if条件满足时,vi--不久溢出了吗
全部回答
  • 1楼网友:北城痞子
  • 2021-03-05 00:51
不要这么写 vector no; int i; for(i=0;i<10;i++) no.push_back(i); 这时 no里的元素是 0 1 2 3 4 5 6 7 8 9 no.begin() 指向 0 no.end() 指向的位置是 9 后边的位置[值为垃圾] vector ::iterator it = no.end(); 这时 it 指向的位置是 9 后边的位置[值为垃圾] for(;it!=no.begin();--it) printf("%d ",*it); 你这样遍历 自然从 no.end() 指向的垃圾值位置开始 [值可能是0] 然后往前走 输出 0[0是垃圾值] 9 8 7 6 5 4 3 2 1 到 no.begin() 时 由于循环条件 it!=no.begin() 自然就结束循环了 输出的最后一项是 no[1] 如果 倒着遍历 vector 使用 reverse_iterator vector no; int i; for(i=0;i<10;i++) no.push_back(i); vector ::reverse_iterator it = no.rbegin(); for(;it!=no.rend(); ++it) printf("%d ",*it);
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯