C++ 如何实现二维矢量阵列?

C++ 如何实现二维矢量阵列?,c++,vector,C++,Vector,我第一次在STL库中使用vector类。如何添加到向量数组的特定行 struct x{ vector <vector <int> > v; int row; }; vector< int* > my ints; int add; 这种方法可以创建向量ints的二维向量吗?其中每一行可能具有不同的长度(即具有不同的列数)?我不确定问题出在哪里,因为您的示例代码有几个错误,并且没有真正弄清楚您要做什么。但以下是如何添加到2D向量的特定行:

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

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

vector< int* > my ints;
int add;

这种方法可以创建向量
int
s的二维向量吗?其中每一行可能具有不同的长度(即具有不同的列数)?

我不确定问题出在哪里,因为您的示例代码有几个错误,并且没有真正弄清楚您要做什么。但以下是如何添加到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);
//声明2D向量
向量myVector;
//创建新行(任意示例)
向量myRow(1,5);
myVector.push_back(myRow);
//将元素添加到行
myVector[0]。向后推_(1);
这回答了你的问题吗?如果没有,您能否尝试更具体地说明您遇到的问题?

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

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;
int-no-of-cols=5;
int no_of_行=10;
int初始值=0;
向量矩阵;
调整大小(没有行,std::vector(没有列,初始值));
//从矩阵中读取。
整数值=矩阵[1][2];
//保存到矩阵。
矩阵[3][1]=5;

另一种可能是只使用一个向量,并将id拆分为多个变量,如访问
vector[(row*columns)+column]

定义二维向量的另一种方法是声明一对向量

 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;
vectorv;
**插入值**
cin>>x>>y;
v、 向后推(形成一对(x,y));
**检索值**
i=0至尺寸(v)
x=v[i]。首先;
y=v[i]。第二;

对于三维向量,请查看tuple并生成tuple。

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

#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 ;
    }
}
#包括
#包括
使用名称空间std;
int main()
{
向量矩阵;
大小为行=3,列=3;

对于(inti=0,cnt=1;i只需使用以下方法创建二维向量

int rows, columns;        

// . . .

vector < vector < int > > Matrix(rows, vector< int >(columns,0));
int行、列;
// . . .
向量>矩阵(行,向量(列,0));

vector>矩阵;
分配(行,向量(列,0));
//在这里做你的事。。。
这将创建一个大小为行*列的矩阵,并使用零对其进行初始化,因为我们将零(0)作为构造函数中的第二个参数传递,即向量(列,0)

//首先初始化2D向量

向量矩阵;

//初始化要插入矩阵的一维向量

矢量行;

//使用值初始化行

行。向后推(val1);

行。向后推(val2);

//现在将值插入矩阵

矩阵。向后推(行);

//输出- [[val1,val2]]


我们可以很容易地使用向量作为二维数组。为此,我们使用resize()方法。 下面的代码有助于理解此问题

代码段:
#包括
使用名称空间std;
int main()
{
ios::与stdio同步(false);
int row,col;
cin>>行>>列;
向量v;
v、 调整大小(列、向量(行));
//v={1,2,3},{4,5,6},{7,8,9};
/**使用输入**/
对于(int i=0;iv[i][j];
}
}
对于(int i=0;i向量矩阵(行,向量(列,0));

这将初始化所有初始值为0的rows=rowcolumns=col二维向量。无需初始化和使用resize

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


< x> [y]=2;<代码>向量adj[n];< /代码> //其中n是2D向量行的数目。

著名的标准模板库库<代码> vector < int > >我的INTS/<代码>不是有效的C++。
int*
。到底是
myints[0]->v
?这不是2D,而是1.5d。其中一个维度被硬编码为大小2。如果您事先知道确切的列数,或者甚至知道一个合理的最小值,您可能希望使用
std::vector
。如果您也知道确切的行数,
std::array
int rows, columns;        

// . . .

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

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

//Do your stuff here...
#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;
}