为什么这一段代码在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
把优化关了
2015年08月02日 03点08分 5
什么优化啊?怎么关呢?麻烦啦[勉强]
2015年08月02日 04点08分
level 10
正常,我qt编译300多个错误,linux下就直接跑起来了,至于原因嘛[滑稽],你懂的
2015年08月02日 04点08分 6
我不懂……我是新手[汗]
2015年08月02日 04点08分
回复
������
:.net惹的祸,微软为了推广他的语言
2015年08月02日 05点08分
@贴吧用户_08D7M7R 话说我这个还是按着C++Primer上的模式来的……
2015年08月02日 05点08分
回复
������
:我也试过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
截图看不清楚,我找个电脑看吧
2015年08月02日 05点08分 9
感谢[哈哈][哈哈]
2015年08月02日 06点08分
level 10
估计是 vbeg = via.erase(vbeg)
大概是iterator乱了吧
2015年08月02日 07点08分 10
怎么个乱法啊,我看书上也是这个模式
2015年08月02日 07点08分
level 7
while(vbeg != via.end())
2015年08月02日 11点08分 11
level 7
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