1

我想使用 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 是后面的行数。

4

2 回答 2

1

你在混音std::cinscanf输入,这是故意的吗?刚刚有什么问题std::cin >> test;

无论如何,您的程序的问题在于您正在阅读 until istream_iterator<int>(),这是“输入结束”。而你正在尝试这样做 4 次。显然,输入只有一端。相反,您应该阅读到行尾。

于 2012-12-11T11:39:47.703 回答
-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;
  }
}

在 Linux 上,您需要在每个向量之后使用 <Enter>、<Ctrl>+<D> 才能使其工作。(< Ctrl >+< D > 在 Linux 中是 eof。)要使其与 < Enter > 单独一起工作,因为它是可取的,您需要使用 getline() 读取字符串缓冲区,然后从缓冲区中读取。

于 2012-12-13T10:41:37.870 回答