读书人

又来问有关问题了 比较两个vector是否

发布时间: 2012-11-10 10:48:51 作者: rapoo

又来问问题了 比较两个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;
}

读书人网 >C++

热点推荐