容器比较,求教。。
- C/C++ code
#include <iostream>#include <string>#include <vector>#include <list>#include <deque>using namespace std;void main(){ vector<int> vec1; list<int> ls1; list<int> ls2; int a = 0; cout << "Input number for vec1!" <<endl; while(cin >> a) vec1.push_back(a); cout << "Input number for list" << endl; int b = 0; while(cin >> b) ls1.push_back(b); for(vector<int>::const_iterator it = vec1.begin();it != vec1.end(); ++it) ls2.push_back(*it); if(ls1 == ls2) cout << "They are the same !" << endl; else cout << "They are different!"<<endl;}题目要求是 比较vec1 和 ls1中的元素 是否相同。
这里无法输入 ls1。。是不是缓冲区的原因, 该怎么改呢?
[解决办法]
while(cin >> a)
vec1.push_back(a);
cout << "Input number for list" << endl;
cin.clear();
cin.sync();
int b = 0;
while(cin >> b)
[解决办法]
while(cin >> a)
vec1.push_back(a);
当这个输入结束后,输入流cin就处于了无效状态,
while(cin >> b)
ls1.push_back(b);
当再次进行输入时,由于输入流cin是处于无效状态,所以无法输入,这时需要清理输入流cin的状态和缓冲区里的数据,cin.clear()这是清理输入流cin的状态,使其状态处于有效,cin.sync(),是清空缓冲区
[解决办法]
不知道你是以什么结束了第一个输入循环,如果你用ctrl+z方式结束了第一个输入循环,就不需要清空缓冲区,也不需要cin.sync(),如果不是以ctrl+z方式结束了第一个输入循环,就需要清空缓冲区。
我用的也是VS2008,并且以ctrl+z结束了第一个循环输入,然后调用cin.clear(),不用调用cin.sync()就可以正确进行第二次循环输入