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);
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯