读书人

小初学者的困惑(C++有关问题)

发布时间: 2012-10-24 14:15:58 作者: rapoo

小菜鸟的困惑(C++问题)
题目的要求是:编写程序判断两个vector是否相等,我写的代码如下:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int c,d;
vector<int> a(4);
vector<int> b(4);
while(cin >> c&& c!=0)//输入0表示结束
{
a.push_back(c);
}
while(cin >> d && d!=0 )
{
b.push_back(d);
}
for(vector<int>::iterator iter1=a.begin() , iter2=b.begin();iter1 != a.end()&&iter2 != b.end();iter1++,iter2++)
{
if (*iter1==*iter2)
{
cout << "两个数组相等";
break;
}
else if (*iter1 > *iter2)
{
cout << "第一个数组大于第二个数组";
break;
}

else
{
cout << "第二个数组大于第一个数组";
break;
}
}

return 0;


}
为啥我的结果总是显示:两个数组相等,没有别的输出,编译没有出错,还请各位多多指点~小弟不胜感激 ~

[解决办法]
我上机跑了下,LZ问题是这样的。一切都正常,确实,问题在于当你输出第一个0时候,判断是相等的,所以直接BREAK出FOR循环了,程序就结束了。首先当你去掉BREAK语句时候,如果你去掉PUSHBACK输入,你会发现a和b是相等的,具体DEBUG会发现都是5个0。原因是你初始化语句错了,开头5个是0,后面才会继续输入。你应该把vector<int> a(5);里面的(5)去掉,因为这个含义是初始化5个0。所以附上改良版。但是这个仍然不能判定整个VECTOR是相等的,你要加入其它的措施,这个就简单了。

C/C++ code
#include <iostream>#include <vector>using namespace std;int main(){  int c,d;  vector<int> a;  vector<int> b;  a.push_back(3);  a.push_back(4);  b.push_back(3);  b.push_back(4);  vector<int>::iterator iter1=a.begin();  vector<int>::iterator iter2=b.begin();  for(;iter1 != a.end()&&iter2 != b.end();iter1++,iter2++)  {if (*iter1==*iter2){cout << "equal"<<endl;cout<<"iter1: "<<*iter1<<" iter2: "<<*iter2<<endl;  //break;}  else if (*iter1 > *iter2){cout << "1 large"<<endl;}else{cout << "2 large"<<endl;}  }  return 0;} 

读书人网 >C++

热点推荐