[英]Initializing a two dimensional std::vector
所以,我有以下内容:
std::vector< std::vector <int> > fog;
我很天真地初始化它,比如:
for(int i=0; i<A_NUMBER; i++)
{
std::vector <int> fogRow;
for(int j=0; j<OTHER_NUMBER; j++)
{
fogRow.push_back( 0 );
}
fog.push_back(fogRow);
}
而且感觉很不对劲......有没有另一种方法来初始化这样的向量?
使用接受初始大小和默认值的std::vector::vector(count, value)
构造函数:
std::vector<std::vector<int> > fog(
ROW_COUNT,
std::vector<int>(COLUMN_COUNT)); // Defaults to zero initial value
如果需要一个非零值(例如4
作为默认值,则:
std::vector<std::vector<int> > fog(
ROW_COUNT,
std::vector<int>(COLUMN_COUNT, 4));
我还应该提到在 C++11 中引入了统一初始化,它允许使用{}
初始化vector
和其他容器:
std::vector<std::vector<int> > fog { { 1, 1, 1 },
{ 2, 2, 2 } };
假设您要初始化二维向量 m*n,初始值为 0
我们可以这样做
#include<iostream>
int main(){
int m = 2, n = 5;
vector<vector<int>> vec(m, vector<int> (n, 0));
return 0;
}
std::vector
没有append
方法,但如果你想制作一个包含A_NUMBER
个int
向量的向量,每个向量都包含other_number
零,那么你可以这样做:
std::vector<std::vector<int>> fog(A_NUMBER, std::vector<int>(OTHER_NUMBER));
已经描述过的一般语法是:
std::vector<std::vector<int> > v (A_NUMBER, std::vector <int> (OTHER_NUMBER, DEFAULT_VALUE))
在这里,向量“v”可以被可视化为一个二维数组,“A_NUMBER”行,“OTHER_NUMBER”列,初始值设置为“DEFAULT_VALUE”。
也可以这样写:
std::vector <int> line(OTHER_NUMBER, DEFAULT_VALUE)
std::vector<std::vector<int> > v(A_NUMBER, line)
在二维向量中输入值类似于在二维数组中输入值:
for(int i = 0; i < A_NUMBER; i++) {
for(int j = 0; j < OTHER_NUMBER; j++) {
std::cin >> v[i][j]
}
}
其他答案中已经说明了示例....!
推荐的方法是使用 fill 构造函数来初始化一个具有给定默认值的二维向量:
std::vector<std::vector<int>> fog(M, std::vector<int>(N, default_value));
其中,M 和 N 是二维向量的维度。
我认为最简单的方法是:
std::vector<std::vector<int>>v(10,std::vector<int>(11,100));
10是外层或全局向量的大小,主要是,11是int类型的内层向量的大小,初始值初始化为100! 这是我在堆栈上的第一个帮助,我认为它可以帮助某人。
假设您要初始化一个二维整数向量,其中 n 行和 m 列的值分别为“ VAL ”
写成
std::vector<vector<int>> arr(n, vector<int>(m,VAL));
此 VAL 可以是整数类型变量或常量,例如 100
这是对我有用的:
vector<vector<int>> minA{ROW_SIZE, vector<int>(COLUMN_SIZE, VALUE)};
这个答案将有助于在声明后轻松初始化二维向量。
int n=4,m=3;
int default_value = 0;
std::vector<std::vector<int>> matrix;
matrix.resize(m, std::vector<int>(n, default_value));
因此,我有以下内容:
std::vector< std::vector <int> > fog;
我非常天真地初始化它,例如:
for(int i=0; i<A_NUMBER; i++)
{
std::vector <int> fogRow;
for(int j=0; j<OTHER_NUMBER; j++)
{
fogRow.push_back( 0 );
}
fog.push_back(fogRow);
}
感觉很不对劲……还有另一种初始化向量的方法吗?
此代码片段将一个二维向量复制到另一个。 并让我们清楚地了解如何初始化二维向量。
void copyVectorToVector(vector<vector<int>> matrix) {
int rowNumber = matrix.size();
int columnNumber = matrix[0].size();
vector<vector<int>> result(rowNumber, vector<int> (columnNumber, 0));
for(int i=0;i<matrix.size();i++){
for(int j=0;j<matrix[i].size();j++){
result[i][j] = matrix[i][j];
cout<<result[i][j]<<" ";
}
cout<<endl;
}
}
对于只想将第一个 col 值初始化为与默认值(例如 1)的 rest 不同的值(例如 2)的人。
int rows = 3, cols = 4;
std::vector<std::vector<int>> matrix(rows, std::vector<int>(cols, 1));
for (int r = 0 ; r < rows ; r++) matrix[r][0] = 2;
2 1 1 1
2 1 1 1
2 1 1 1
我的c++ STL
代码用zero
初始化5*3 2-D vector
#include <iostream>
using namespace std;
#include <vector>
int main()
{// if we wnt to initialise a 2 D vector with 0;
vector<vector<int>> v1(5, vector<int>(3,0));
for(int i=0;i<v1.size();i++)
{
for(int j=0;j<v1[i].size();j++)
cout<<v1[i][j]<<" ";
cout<<endl;
}
}
带有 2D 向量的乘法表,前 10 用于 ROW,后 10 用于 COLUMN
std::vector<std::vector<int>> multiplication (10,std::vector<int>(10));
for(int i{0}; i<multiplication.size(); ++i){
for(int j{0}; j<multiplication[i].size(); ++j){
multiplication[i][j] = j * i;
}
}
for(int i{1}; i < multiplication.size(); ++i){
for(int j{1}; j < multiplication[i].size(); ++j){
std::cout<<multiplication[i][j]<<"\t";
}
printf("\n");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.