想用STL在c ++中扫描二维数组

时间:2012-12-11 11:36:34

标签: c++ stl

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

2 个答案:

答案 0 :(得分:1)

您正在混合std::cinscanf输入,这是故意的吗?仅仅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()读取字符串缓冲区,然后从缓冲区读取。