c++使用vector创建二维数组的方法

c++使用vector创建二维数组的方法

一次性定义

此种方法适用于每一行的列数都相等的二维数组的定义(与初始化)。

//使用vector一次性完成二维数组的定义(注意:此种方法适用于每一行的列数相等的二维数组)
vector<vector<int>> matrix(m, vector<int>(n, -1));

//以下是拆分理解
//创建一维数组matirx,这个数组里有m个元素,元素是int型vector。
vector<vector<int>> matrix(m);
//除了定义数组类型及数组大小外,同时给数组中的元素赋值:将元素赋值为大小为n的int型vector。
vector<vector<int>> matrix(m, vector<int>(n));
//除了定义数组类型、数组大小、列的大小,同时给数组列中的元素(或者说,数组中的所有元素)赋值为-1。
vector<vector<int>> matrix(m, vector<int>(n, -1));

插入元素型定义

此种方法适用于每一行的列数都相等不相等的二维数组的定义(与初始化)。

//比较具有普遍性的写法(注意:此种方法适用于每一行的列数相等的二维数组)
vector<vector<int>> matrix;//创建一维数组matirx,这个数组里的元素是int型vector。
int m = 3; //matrix有m行
int n = 10; //matrix有n列
int value = 1; //最终matrix成为二维数组后,其中每个元素的值为1(如果不需要进行初始化,此语句可以省略)
for (int i = 0; i < m; ++ i) {
    vector<int> tmp(n, value); //定义int型一维数组tmp,该数组有n个int型元素,且每个元素的初始值为value
    matrix.push_back(tmp); //将一维数组tmp(小容器)加入matrix(大容器)中,使之成为matrix的元素,令matrix成为二维数组
}

//如果需要每一行的列数不同(虽然一般很少这样做),也可以使用下面这种写法进行定义、初始化
vector<vector<int>> matrix;

vector<int> a(10, 1); //单独定义每个小容器的元素个数和元素初始值
vector<int> b(5, 2);
vector<int> c(10, 3);

matrix.push_back(a); //将每个小容器加入matrix(大容器)中
matrix.push_back(b);
matrix.push_back(c);

resize扩充型定义

此种方法适用于每一行的列数都相等不相等的二维数组的定义(与初始化)。

vector.resize函数的使用说明参考此文档

//使用vector的resize函数进行二维数组的定义(注意:此种方法适用于每一行的列数相等或不相等的二维数组,调整for循环内的resize函数的参数即可)
vector<vector<int>> matrix(m); //创建一维数组matirx,这个数组里有m个元素,元素是int型vector。不能省略m。
for (int i = 0; i < m; ++ i) {
	matrix[i].resize(10, 1); //使用vector的resize函数,对matrix(大容器)中的每个元素的大小进行更新(可以同时进行初始化)。此处表示:将matrix(大容器)中第i个int型vector的大小定义为10,且其元素均初始化为1。
    //如果不需要进行初始化,resize函数的第二个参数可以省略
}
上一篇:腾讯五十题No.17 螺旋矩阵


下一篇:任务安排