首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个push_back有关问题

2012-09-13 
一个push_back问题前一个svec能插入元素,但后一个slist不能插入,我要向着两个分别输入数据,求可行方法?[co

一个push_back问题
前一个svec能插入元素,但后一个slist不能插入,我要向着两个分别输入数据,求可行方法?
[code=C/C++][/code]

C/C++ code
#include <vector>#include <list>#include <iostream>using namespace std;bool Same(vector<int> &svec,list<int> &slist){    vector<int>::iterator vfirst=svec.begin(),vend=svec.end();    list<int>::iterator lfirst=slist.begin(),lend=slist.end();    if(svec.size()!=slist.size())        return false;    else    {        while(vfirst!=vend)            if(*vfirst++!=*lfirst++)                return false;            else return true;    }}int main(){    vector<int> svec;    list<int> slist;    int sv,sl;    while(cin >>sv)        svec.push_back(sv);    list<int>::iterator iter=slist.begin();    cin.clear();    while(cin >>sl)        iter=slist.insert(iter,sl);    vector<int>::iterator sfirst=svec.begin(),send=svec.end();    list<int>::iterator lfirst=slist.begin(),lend=slist.end();    while(sfirst!=send)    {        cout <<*sfirst++<<" ";            cout <<endl;    }    while(lfirst!=lend)    {        cout <<*lfirst++<<" ";        cout <<endl;    }    if(Same(svec,slist))        cout <<"相同"<<endl;    else    cout <<"不相同"<<endl;    return 0;}


[解决办法]
先不说你问的问题吧,看第一眼,发现你的Same函数可能写有的能点问题,得改改,如下:
C/C++ code
bool Same(vector<int> &svec,list<int> &slist){    vector<int>::iterator vfirst=svec.begin(),vend=svec.end();    list<int>::iterator lfirst=slist.begin(),lend=slist.end();    if(svec.size()!=slist.size())    return false;    else    {        while(vfirst!=vend)            if(*vfirst++!=*lfirst++)                return false;        return true;    }}
[解决办法]
C/C++ code
    while(cin >>sl)        iter=slist.insert(iter,sl);
[解决办法]
有点没看懂楼主要问的啥……个人觉得vector与list虽然数据结构不同,但很多操作还是一样的,比如插入操作,应该都支持的。
ps:代码中iter=slist.insert(iter,sl);可以改成slist.push_front(sl);
[解决办法]
仅供参考
C/C++ code
#include <vector>#include <list>#include <iostream>using namespace std;bool Same(vector<int> &svec,list<int> &slist){    vector<int>::iterator vfirst=svec.begin(),vend=svec.end();    list<int>::iterator lfirst=slist.begin(),lend=slist.end();    if(svec.size()!=slist.size())        return false;    else    {        while(vfirst!=vend)            if(*vfirst++ != *lfirst++)//等号改成"=="                return false;            //else return true;//这样我会在判断一次,后直接判断相同,函数返回,后面的都不比较了    }    return true;//能跳出上面的while循环走到这一步,就说明所有的元素都相等。}int main(){    vector<int> svec;    list<int> slist;    int sv,sl;    while(cin >>sv)        svec.push_back(sv);    //list<int>::iterator iter=slist.begin();    cin.clear();    while(cin >>sl)        slist.insert(slist.end(),sl);//每次插在最后,这样才能保证顺序。    vector<int>::iterator sfirst=svec.begin(),send=svec.end();    list<int>::iterator lfirst=slist.begin(),lend=slist.end();    while(sfirst!=send)    {        cout <<*sfirst++<<" ";        cout <<endl;    }    while(lfirst!=lend)    {        cout <<*lfirst++<<" ";        cout <<endl;    }    if(Same(svec,slist))        cout <<"相同"<<endl;    else cout <<"不相同"<<endl;    fflush(stdin);    getchar();    return 0;} 


[解决办法]
windows下使用Ctrol+Z结束

linux 使用Ctrl+D

探讨
这都是一样的,现在主要是我输入的数据都进第一个svec了,而后一个没输入任何东西,我想主要问题是结束前一个cin操作,开始下一个cin

引用:

有点没看懂楼主要问的啥……个人觉得vector与list虽然数据结构不同,但很多操作还是一样的,比如插入操作,应该都支持的。
ps:代码中iter=slist.insert(iter,sl);可以改成slist.push_fr……

[解决办法]
ls+1
windows下ctrl+z结束cin输入流
[解决办法]
这样可以
1 2 3 4 5回车 
ctrl+Z 回车

1 2 3 4 5回车
Ctrl+Z 回车

[解决办法]
cin返回对象的引用,不能做判断的条件吧

热点排行