我想使用 c++ stl 扫描二维数组。这就是我正在做的,请告诉我它有什么问题。
int test;
scanf("%d\n",&test);
VVI all_integers;
while(test--)
{
all_integers.push_back(VI(istream_iterator<int>(cin),istream_iterator<int>()));
}
样本输入:-
4
1 2 3 4 5
1 2 3 4
1 2
1
其中 test 是后面的行数。
你在混音std::cin
和scanf
输入,这是故意的吗?刚刚有什么问题std::cin >> test;
?
无论如何,您的程序的问题在于您正在阅读 until istream_iterator<int>()
,这是“输入结束”。而你正在尝试这样做 4 次。显然,输入只有一端。相反,您应该阅读到行尾。
这是我的解决方案:
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
int main(){
int k;
cin >> k; cout << endl << "k = " << k << endl;
ostream_iterator<int> oi(cout, " ");
vector<vector<int> > vpi;
while(k--)
{
vpi.push_back(vector<int>(istream_iterator<int>(cin), istream_iterator<int>()));
cin.clear();
cout<<"k = "<< k <<endl;
copy(vpi[vpi.size()-1].begin(), vpi[vpi.size()-1].end(), oi);
cout<<endl;
}
}
在 Linux 上,您需要在每个向量之后使用 <Enter>、<Ctrl>+<D> 才能使其工作。(< Ctrl >+< D > 在 Linux 中是 eof。)要使其与 < Enter > 单独一起工作,因为它是可取的,您需要使用 getline() 读取字符串缓冲区,然后从缓冲区中读取。