一个push_back问题
前一个svec能插入元素,但后一个slist不能插入,我要向着两个分别输入数据,求可行方法?
[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;}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; }}
[解决办法]
while(cin >>sl) iter=slist.insert(iter,sl);
[解决办法]
有点没看懂楼主要问的啥……个人觉得vector与list虽然数据结构不同,但很多操作还是一样的,比如插入操作,应该都支持的。
ps:代码中iter=slist.insert(iter,sl);可以改成slist.push_front(sl);
[解决办法]
仅供参考
#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