用STL扫描C++中的二维数组 我想用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>())); }

用STL扫描C++中的二维数组 我想用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>())); },c++,stl,C++,Stl,其中test是后面的行数。您正在混合std::cin和scanf输入,这是有意的吗?仅使用std::cin>>测试有什么问题 无论如何,您的程序的问题是,您一直在读取istream_迭代器,这是输入的结束。你已经试过四次了。显然,输入只有一端。相反,你应该读到一行的末尾。以下是我的解决方案: #include <iostream> #include <vector> #include <iterator> using namespace std; int m

其中test是后面的行数。

您正在混合std::cin和scanf输入,这是有意的吗?仅使用std::cin>>测试有什么问题

无论如何,您的程序的问题是,您一直在读取istream_迭代器,这是输入的结束。你已经试过四次了。显然,输入只有一端。相反,你应该读到一行的末尾。

以下是我的解决方案:

#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上使用+,以使其正常工作Ctrl>+在Linux中是eof。为了使它能够单独使用,您需要使用getline在字符串缓冲区中读取,然后从缓冲区中读取

在这里使用new是不必要的,并且您设置它的方式引入了内存泄漏,以避免您希望存储指针以便以后能够删除它们。你是对的,它返回一个临时的,但是push_back会复制它…就像你做push_back 5一样。
#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;
  }
}