如何实现二维矢量阵列
How to implement 2D vector array?
我第一次在STL库中使用向量类。我应该如何添加到向量数组的特定行?
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的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);
这能回答你的问题吗?如果没有,你能试着更具体地说明你遇到了什么问题吗?
如果事先知道行和列的(最大)数量,则可以使用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]
。
只需使用以下方法创建二维矢量。
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...
这将创建一个大小为行*列的矩阵,并用零初始化它,因为我们在构造函数中传递零(0)作为第二个参数,即向量<int>(columns,0)。
//初始化2D矢量第一
vector<vector<int>> matrix;
//初始化要插入矩阵的1D矢量
vector<int> row;
//用值初始化行
row.push_back(val1);
row.push_back(val2);
//现在将值插入矩阵
matrix.push_back(row);
//输出-[[val1,val2]]
我们可以很容易地将向量用作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;
}
定义二维向量的另一种方法是声明对的向量。
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;
对于三维矢量,请查看tuple和make_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 ;
}
}
向量<矢量>矩阵(行,向量(col,0))
这将初始化行=行和列=列的2D向量,所有初始值均为0。无需初始化和使用resize。
由于矢量是用大小初始化的,因此可以使用"[]";运算符作为数组中的运算符来修改向量。
矩阵[x][y]=2
vector<int> adj[n];
//其中n是二维向量中的行数。
- 二维阵列的动态分配
- C2440 使用Shared_ptr创建二维阵列
- 围绕二维阵列做一个圆圈
- 为什么一个二维阵列会导致赛段故障,而另一个则不会导致?
- 二维阵列的名称到底代表什么?
- 返回二维阵列
- 是二维阵列访问/修改时间组
- 如何创建一个具有空值、递减编号系统和.txt文件输入值的二维阵列网格
- 八个皇后二维阵列,带有gotos errror
- C++中的二维阵列
- 使用矢量创建二维阵列
- 编制二维阵列
- 错误:解除分配二维阵列
- 复制二维阵列C++
- 将二维阵列模拟为一维阵列
- 从具有两列的文件中加载二维阵列
- 可调整大小的动态二维阵列的更好解决方案
- 使用二维阵列用C++求解埃拉托色尼筛
- 如何显示非对角线二维阵列元素
- 嵌套阵列或嵌套二维阵列