为什么这一段代码在VS2012上报错但是在codeblocks上没问题?
c++吧
全部回复
仅看楼主
level 3
龙弧刃
楼主
2015年08月02日 02点08分
1
level 3
龙弧刃
楼主
就是在第二张图的那个循环报错,执行第二次循环的时候,是这样的
2015年08月02日 02点08分
2
level 3
龙弧刃
楼主
求助,求助
2015年08月02日 02点08分
3
level 3
龙弧刃
楼主
自顶
2015年08月02日 02点08分
4
level 14
genrwoody
把优化关了
2015年08月02日 03点08分
5
龙弧刃
什么优化啊?怎么关呢?麻烦啦
2015年08月02日 04点08分
level 10
贴吧用户_08D7M7R
正常,我qt编译300多个错误,linux下就直接跑起来了,至于原因嘛
,你懂的
2015年08月02日 04点08分
6
龙弧刃
我不懂……我是新手
2015年08月02日 04点08分
贴吧用户_08D7M7R
回复
������
:.net惹的祸,微软为了推广他的语言
2015年08月02日 05点08分
龙弧刃
@贴吧用户_08D7M7R
话说我这个还是按着C++Primer上的模式来的……
2015年08月02日 05点08分
贴吧用户_08D7M7R
回复
������
:我也试过primer上的代码,老是出现错误,然后果断不用vs了,
2015年08月02日 05点08分
level 10
三刀流留三刀
因为你删除了一个元素后,原迭代器vbeg失效,需要重新初始化vbeg
2015年08月02日 05点08分
7
龙弧刃
我初始化了啊,你看while循环里的if语句里重新给vbeg赋值了
2015年08月02日 05点08分
三刀流留三刀
回复
������
:好吧,vbeg你重新赋值了,但while的判断条件中ven没有重新赋值吧,你试下将数组中的89改为88试下就出问题了
2015年08月02日 06点08分
龙弧刃
回复
������������
:说的好有道理!!我去试试
2015年08月02日 06点08分
level 5
大兴暂定
估计是编译器对auto计算类型不一样
2015年08月02日 05点08分
8
龙弧刃
应该不是吧,debug时循环第一次执行的时候都好着呢
2015年08月02日 06点08分
大兴暂定
回复 龙弧刃 :老朽跟你赌一毛,把auto换成vector<int>::iterator肯定好了
2015年08月02日 07点08分
龙弧刃
回复
�����ݶ�
:我觉得另一个说的end()迭代器失效很有道理,我一会也试试你这个
2015年08月02日 07点08分
大兴暂定
回复
������
:确实,删除元素会使所以迭代器失效
2015年08月02日 07点08分
level 13
beechcraft
截图看不清楚,我找个电脑看吧
2015年08月02日 05点08分
9
龙弧刃
感谢
2015年08月02日 06点08分
level 10
小涯子r
估计是 vbeg = via.erase(vbeg)
大概是iterator乱了吧
2015年08月02日 07点08分
10
龙弧刃
怎么个乱法啊,我看书上也是这个模式
2015年08月02日 07点08分
level 7
MA877182228
while(vbeg != via.end())
2015年08月02日 11点08分
11
level 7
MA877182228
int v[] = {1 2 3 4 5}
int *vbeg = &v[0];
int *vend = &v[5];
当删除2的时候 序列为
1 3 4 5
vbeng 指向v[1];
而你的vend 还指向&v[5] 明显就错了
vs2012报错的原因是你的逻辑错误
2015年08月02日 11点08分
12
龙弧刃
谢谢啦
我知道哪里错了,就是vend有问题
2015年08月02日 13点08分
1