如何从用户处获取输入来初始化 C++ 中的向量向量

问题描述 投票:0回答:1

这是我的一段代码,我试图从 2D 向量获取输入,但是当我尝试输入输入时出现分段错误。我正在尝试使用 insert 成员函数而不是 Push_back。

`#include <iostream>
#include<vector>
using namespace std;

int main() {
vector< vector<int> > v;
int rowsa=2;
int colsa=2;
int temp=0;

// Iterator
vector< vector<int>> :: iterator iter=v.begin();
vector<int> :: iterator it;

cout<<"Enter the matrix values row wise: "<<endl;
for(int i=0; i<rowsa; i++)
{
    it=v[i].begin();
    for(int j=0; j<colsa; j++)
    {
        cin>>temp;
        v[i].insert(it+j, temp);
    }
}

cout<<"Entered matrix is: "<<endl;
for(int i=0;i<rowsa;i++)
{
    for(int j=0;j<colsa;j++)
    {
        cout<<v[i][j]<<"  ";
    }
    cout<<endl;
}

return 0;
}`
c++ vector
1个回答
0
投票

嗨,这个代码中的问题是您需要预先调整内部向量的大小以适应您打算插入的列数,或者使用push_back方法动态添加元素

既然您提到您更喜欢使用 insert 成员函数而不是 Push_back,那么让我们确保内部向量已正确初始化:

#include <iostream>
#include <vector>
using namespace std;

int main() {
   vector<vector<int>> v;
   int rows = 2;
   int cols = 2;
   int temp = 0;

   // Resize each row of the vector of vectors
   v.resize(rows, vector<int>(cols));

   cout << "Enter the matrix values row wise: " << endl;
   for(int i = 0; i < rows; i++) {
       // Get an iterator to the beginning of the i-th row
       vector<int>::iterator it = v[i].begin();
       for(int j = 0; j < cols; j++) {
           cin >> temp;
           // Since the inner vectors are already the correct size, we use the iterator to set values
           v[i][j] = temp;  // Alternatively, using insert: v[i].insert(it + j, temp);
       }
   }

   cout << "Entered matrix is: " << endl;
   for(int i = 0; i < rows; i++) {
       for(int j = 0; j < cols; j++) {
           cout << v[i][j] << "  ";
       }
       cout << endl;
   }

   return 0;
}

如果这个解释可以帮助您理解这个概念,我很高兴知道! 😊

© www.soinside.com 2019 - 2024. All rights reserved.