什么原因导致在VS2010里面报错了,求解!

boylinux 2012-03-20 12:00:44


#include <iostream>
#include <cctype>
#include <string>
#include <vector>
//#include <bitset>

using namespace std;
//string sa1[10];
int main(){
vector<int> ivec1,ivec2;
int ival;

cin>>ival;

while(ival!=-1){
ivec1.push_back(ival);
cin>>ival;
}

cin>>ival;
while(ival!=-1){
ivec2.push_back(ival);
cin>>ival;
}

if(ivec1.size()!=ivec2.size())
cout<<"ivec1 is not equal to ivec2!"<<endl;
else if(ivec1.size()== 0)
cout<<"ivec1 is not equal to ivec2!"<<endl;
else {
vector<int>::iterator iter1,iter2;
iter1=ivec1.begin();
iter2=ivec2.begin();
while(*iter1==*iter2&&(iter1!=ivec1.end())&&(iter2!=ivec2.end()))
++iter1,++iter2;

if(iter1==ivec1.end())
cout<<"equal"<<endl;
else cout<<"not equal"<<endl;
}

return 0;
}


什么原因导致在VS2010里面报错了,求解!
...全文
64 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
一鸣惊天 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]
while((iter1!=ivec1.end())&&(iter2!=ivec2.end())&&*iter1==*iter2)

原因很简单,对end()返回的迭代器进行解引用时未定义的。
[/Quote]

+ +

while(*iter1==*iter2&&(iter1!=ivec1.end())&&(iter2!=ivec2.end()))
先判断*iter1==*iter2

expr1 && expr2
expr1 || expr2
仅当由expr1不能确定表达式的值时,才会求解expr2。

所以:while((iter1!=ivec1.end())&&(iter2!=ivec2.end())&&*iter1==*iter2)
当执行*iter1==*iter2之前,以确保iter1!=ivec1.end() && iter2!=ivec2.end()
pengzhixi 2012-03-20
  • 打赏
  • 举报
回复
while((iter1!=ivec1.end())&&(iter2!=ivec2.end())&&*iter1==*iter2)

原因很简单,对end()返回的迭代器进行解引用时未定义的。

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧