又来问问题了 比较两个vector是否相等
- C/C++ code
#include<iostream>#include<string>#include<cstddef>#include<cctype>#include<vector>using namespace std;int main(){ vector<int> ivec1; vector<int> ivec2; int number; cout<<"input ivec1"<<endl; while(number!=-1) { ivec1.push_back(number); cin>>number; } cout<<"input ivec2"<<endl; cin>>number; //the key while(number!=-1) { cin>>number; ivec2.push_back(number); } //²âÊÔÓï¾ä¶Î vector<int>::iterator iter3,iter4; for(iter3=ivec1.begin(),iter4=ivec2.begin();iter3!=ivec1.end(),iter4!=ivec2.end();++iter3,++iter4) {cout<<"ivec1="<<*iter3<<endl; cout<<"ivec2="<<*iter4<<endl;} if(ivec1.size()!=ivec2.size()) { cout<<ivec1.size()<<endl; cout<<ivec2.size()<<endl; cout<<"ivec1 != ivec2"<<endl; } else if(ivec1.size()==ivec2.size()==0) cout<<"ivec1=ivec2"<<endl; else { vector<int>::iterator iter1,iter2; for(iter1=ivec1.begin(),iter2=ivec2.begin();iter1!=ivec1.end(),iter2!=ivec2.end();++iter1,++iter2) { if(*iter1!=*iter2) cout<<"not equal"<<endl; return 0; } cout<<"equal"<<endl; }}问题是为什么运行的时候输入ivec1=1 2 3 和ivec2=1 2 3时 ivec1的第一个元素不等于1,而且ivec1!=ivec2
[解决办法]
帮你修改了一下:
- C/C++ code
#include "stdafx.h"#include <iostream>#include<vector>using namespace std;int main(){ vector<int> ivec1; vector<int> ivec2; int number = 0; cout<<"input ivec1"<<endl; while(1) { cin>>number; if(-1 == number) break; ivec1.push_back(number); } cout<<"input ivec2"<<endl; while(1) { cin>>number; if(-1 == number) break; ivec2.push_back(number); } vector<int>::iterator iter3,iter4; for(iter3=ivec1.begin(), iter4=ivec2.begin(); (iter3!=ivec1.end()) && (iter4 != ivec2.end()); ++iter3, ++iter4) { cout<<"ivec1="<<*iter3<<endl; cout<<"ivec2="<<*iter4<<endl; } if(ivec1.size() != ivec2.size()) { cout<<ivec1.size()<<endl; cout<<ivec2.size()<<endl; cout<<"ivec1 != ivec2"<<endl; } else { cout<<"ivec1 and ivec2 :"; vector<int>::iterator iter1,iter2; bool bequal = true; for(iter1=ivec1.begin(), iter2=ivec2.begin();(iter1!=ivec1.end()) && (iter2!=ivec2.end()); ++iter1, ++iter2) { if(*iter1!=*iter2) { bequal = false; cout<<"not equal"<<endl; break; } } if(bequal) cout<<"equal"<<endl; } return 0;}
[解决办法]
等学好这些基础之后,可以考虑STL中的一些算法,
比如说相等就可以用std::equal
template <class InputIterator1, class InputIterator2>
bool equal ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2 );
template <class InputIterator1, class InputIterator2, class BinaryPredicate>
bool equal ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, BinaryPredicate pred );
[解决办法]
int number; //number 未初始化
cout<<"input ivec1"<<endl;
while(number!=-1)
{
ivec1.push_back(number); /*首先进入vector的是未初始化的number, 应该把下面的
cin>>number放到前面,才会产生你要的结果*/
cin>>number;
}