【STL】vector申请二维数组

参考了两篇博客:

https://blog.csdn.net/baidu_31818237/article/details/52080920  

https://blog.csdn.net/u010159842/article/details/51325185

一、参考一

做题的时候想当然了,申请二维数组直接这样写:

vector<vector<int> > vec;
vec[0][0] = 1;  //error 

很明显的越界访问,此时的vec空有其名,没有空间。

此时的vec.size为0,空有其名,没有空间大小,并不能用来访问元素,此时可以向vec中添加一维向量 
方案一:

vec.push_back(vector<int>());

vector()的()中可以添加参数vector(m,n),其中m为一维向量的大小,默认为0,n为一维向量中的元素,默认为0. 
方案二:

vec.resize(1);
vec.resize()有两个参数(m,n),m为vec的大小,n为vector(),也就是申明vec时vector<>vec中尖括号之间的东西。 
到此我们也可看出,vector二维数组其实就是一个嵌套,因此我们也可以这样理解:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
#define type vector < int >
#define type_size 6     //大小自定
#define type_value 3    //大小自定
#define vec_size 6      //大小自定
#define vec_value type(type_size,type_value)//参数可不要
int main()
{
    vector<type> vec(vec_size,vec_value);//申明二维向量,vec_size指定大小,vec_value指定初始值,两参数默认为0,都可不要
    vec.push_back(vec_value);            //添加一个一维向量
    vec.resize(vec_size, vec_value);     //重新指定二维向量的大小,不足的用vec_vauet(一维向量)填充
    return 0;
}


二、参考二

1.方法一:

用 STL vector 来创建二维数组

以前我要建立一个二维数组,总是使用 
int N=5, M=6; 
vector<vector<int> > Matrix(N); 
for(int i =0; i< Matrix.size(); i++){ 
   Matrix[i].resize(M); 

上面多写了三行,就是为了指定 Matrix 的烈数。 

2.方法二:
下面的一行就可以代替上面的四行 
vector<vector<int> > Matrix(N, vector<int>(M)); 
 

三、实测

1.方法1:

int main()
{
	const int row = 4;
	const int col = 4;
	vector<vector<int> > mat(row);  //mat申请空间
	for(int i = 0;i<mat.size();i++)
	{
		mat[i].resize(col);
	}

	int arr[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
	int n = sizeof(arr)/sizeof(arr[0]);
	int i = 0;
	for(int j = 0;j<4;j++)
	{
		for(int k = 0;k<4;k++)
		{
			mat[j][k] = arr[i++];
		}
	}

	//输出mat
	for(int i = 0;i<row;i++)
	{
		for(int j = 0;j<col;j++)
		{
			cout<<mat[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
}

2.方法2:4行3列

int main()
{
	const int row = 4;
	const int col = 3;

	vector<vector<int> > mat(row, vector<int>(col));

	int arr[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
	int n = sizeof(arr)/sizeof(arr[0]);
	int i = 0;
	for(int j = 0;j<row;j++)
	{
		for(int k = 0;k<col;k++)
		{
			mat[j][k] = arr[i++];
		}
	}

	//输出mat
	for(int i = 0;i<row;i++)
	{
		for(int j = 0;j<col;j++)
		{
			cout<<mat[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;

}
发布了89 篇原创文章 · 获赞 68 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/zDavid_2018/article/details/100534105