我想用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是后面的行数。
答案 0 :(得分:1)
您正在混合std::cin
和scanf
输入,这是故意的吗?仅仅std::cin >> test;
会出现什么问题?
无论如何,您的计划存在的问题是您在istream_iterator<int>()
之前阅读,这是输入的结尾&#34;。你试图这样做4次。显然,只有输入的一端。相反,你应该读到一行的结尾。
答案 1 :(得分:-1)
这是我的解决方案:
#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;
}
}
你需要使用&lt;输入&gt;,&lt; Ctrl&gt; +&lt; D>在每个向量之后的Linux上使其工作。 (&lt; Ctrl&gt; +&lt; D&gt;在Linux中是eof。)使其与&lt;输入&gt;单独,因为它是可取的,你需要使用getline()读取字符串缓冲区,然后从缓冲区读取。