如何实现2D矢量数组?

时间:2012-03-14 01:48:36

标签: c++ vector

我第一次在STL库中使用vector类。我应该如何添加到矢量数组的特定行?

struct x{
     vector <vector <int> > v;
     int row;
 };

vector< int* > my ints;
int add;

如果我想用第一个整数指针添加到v的第一行,我可以吗

myints[0]->v[myints[0]->row].push_back(add);

此方法是否可以创建向量int s的二维向量,其中每行可能具有不同的长度(即具有不同的列数)?

9 个答案:

答案 0 :(得分:60)

我不确定问题是什么,因为您的示例代码有几个错误,并没有真正说清楚您要做什么。但是这里是你如何添加到2D矢量的特定行:

// declare 2D vector
vector< vector<int> > myVector;
// make new row (arbitrary example)
vector<int> myRow(1,5);
myVector.push_back(myRow);
// add element to row
myVector[0].push_back(1);

这是否回答了你的问题?如果没有,您是否可以尝试更具体地说明您遇到的问题?

答案 1 :(得分:42)

如果您事先知道(最大)行数和列数,则可以使用resize()初始化向量向量,然后使用operator[]修改(和访问)元素。例如:

int no_of_cols = 5;
int no_of_rows = 10;
int initial_value = 0;

std::vector<std::vector<int>> matrix;
matrix.resize(no_of_rows, std::vector<int>(no_of_cols, initial_value));

// Read from matrix.
int value = matrix[1][2];

// Save to matrix.
matrix[3][1] = 5;

另一种可能性是只使用一个向量并将id分成几个变量,访问类似vector[(row * columns) + column]

答案 2 :(得分:9)

只需使用以下方法创建二维矢量。

int rows, columns;        

// . . .

vector < vector < int > > Matrix(rows, vector< int >(columns,0));

OR

vector < vector < int > > Matrix;

Matrix.assign(rows, vector < int >(columns, 0));

//Do your stuff here...

这将创建一个大小行*列的矩阵,并使用初始化它,因为我们在构造函数中传递零(0)作为第二个参数,即< strong> vector&lt; int&gt; (列,0)。

答案 3 :(得分:5)

  

//首先初始化2D矢量

vector<vector<int>> matrix;

  

//初始化要插入矩阵的1D向量

vector<int> row;

  

//用值

初始化行

row.push_back(val1);

row.push_back(val2);

  

//现在将值插入矩阵

matrix.push_back(row);

  

//输出 -   [[VAL1,VAL2]]

答案 4 :(得分:5)

我们可以很容易地将vector用作2d数组。为此,我们使用resize()方法。 以下代码有助于理解此问题。

代码段:

#include<bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    int row, col;
    cin>>row>>col;

    vector <vector<int>> v;
    v.resize(col,vector<int>(row));

    //v = {{1,2,3}, {4,5,6}, {7,8,9}}; 

    /** input from use **/
    for(int i=0; i<row; i++)
    {
       for(int j=0; j<col; j++)
       {
          cin>>v[i][j];
       }
    }

    for(int i=0;i<row; i++)
    {
       for(int j=0;j<col;j++)
       {
          cout<<v[i][j]<<" ";
       }
    }
    return 0;
}

答案 5 :(得分:1)

定义2-d向量的另一种方法是声明对的向量。

 vector < pair<int,int> > v;

**To insert values**
 cin >> x >>y;
 v.push_back(make_pair(x,y));

**Retrieve Values**
 i=0 to size(v)
 x=v[i].first;
 y=v[i].second;

对于三维向量,请查看元组和make_tuple。

答案 6 :(得分:1)

我使用这段代码。对我来说很好。查看它并在您的计算机上运行。你会自己明白的。

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector <vector <int> > matrix;
    size_t row=3 , col=3 ;
    for(int i=0,cnt=1 ; i<row ; i++)
    {
        for(int j=0 ; j<col ; j++)
        {
            vector <int> colVector ;
            matrix.push_back(colVector) ;
            matrix.at(i).push_back(cnt++) ;
        }
    }
    matrix.at(1).at(1) = 0;     //matrix.at(columns).at(rows) = intValue 
    //printing all elements
    for(int i=0,cnt=1 ; i<row ; i++)
    {
        for(int j=0 ; j<col ; j++)
        {
            cout<<matrix[i][j] <<" " ;
        }
        cout<<endl ;
    }
}

答案 7 :(得分:0)

vector 矩阵(行,vector(col,0));

这将初始化二维向量 rows = row columns = col ,所有初始值均为0。无需初始化并使用调整大小。

由于向量是使用大小初始化的,因此可以像数组中一样使用“ [] ”运算符来修改向量。

矩阵[x] [y] = 2;

答案 8 :(得分:0)

vector<int> adj[n]; //其中n是2d向量中的行数。