回 帖 发 新 帖 刷新版面

主题:寻求朋友们帮忙

大家帮忙看一下这个程序错在哪了。判断两个容器是否相等的程序。
#include<iostream>
#include<vector>
using namespace std;
void main()
{
    int ival;
    vector<int> ivec1,ivec2;
    cout<<"为第一个容器输入数据"<<endl;
    cin>>ival;
    while(ival!=88)
    {
        ivec1.push_back(ival);
        cin>>ival;
    }
    cout<<"为第二个容器输入数据"<<endl;
    cin>>ival;
    while(ival!=88)
    {
        ivec2.push_back(ival);
        cin>>ival;
    }
    if(ivec1.size()!=ivec2.size())
    {
        cout<<"这两个容器不相等"<<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<<"这两个容器相等"<<endl;
        }
        else
        {
            cout<<"这两个容器不相等"<<endl;
        }
    }
   system("pause");
}

回复列表 (共1个回复)

沙发

顺序不对。
while(*iter1==*iter2&&iter1!=ivec1.end()&&iter2!=ivec2.end())
应该修改为:
while(iter1!=ivec1.end()&&iter2!=ivec2.end()&&*iter1==*iter2)

原因:
*iter1如果等于ivec1.end(),则*iter1会出错。所以,应该先判断iter1!=ivec1.end(),再去取*iter1的值。iter2同理。

我来回复

您尚未登录,请登录后再回复。点此登录或注册