用vector构造二维数组

我们知道,C++的template参数是可以嵌套定义的,你可以这样定义一个模板的Instance

vector <vector <int> >array2(3);//注意> 和> 之间的空格。

这就是我们的关键,array2可以保存3个向量,向量的长度是可以改变的。array2[i]返回的是第i个向量。同理,array2[i][j]返回的是第i个向量中的第j个元素。

    别急,还有一些细节问题:如下

          vector <vector <int> >array2(3);

          array2[1][2]=9;

    我保证你的程序会segement   failed,原因就是你没有指定向量的大小。用push_back函数可以解决问题:array2[1].push_back(9);但是好象不太爽。就不能用operator[]吗?答案是肯定的。不过要多加几个步骤,如下:

            for(int i=0;i <3;i++)

                  array2[i].resize(3);

    这样,你就定义了一个3X3的数组了(另一个3在申明时定义的)。而且你可以随时改变它的大小。

    其他的,你还可以用C++的异常机制来捕获如下标越界等非法行为。进行必要的处理。使你的程序更加的健壮。

扫描二维码关注公众号,回复: 3787400 查看本文章

下面提供一个范例,供参考。  

//用vector来代替数组
#include<iostream>
#include<vector>
using namespace std;
void main()
{
	vector<vector<int> >array(3);//二维数组包含3个向量
	for(int i = 0; i <3; i++)
		array[i].resize(3);//设置数组的大小3X3

	//现在你可以和使用数组一样使用这个vector
	for (int i = 0; i <3; i++)
		for (int j = 0; j <3; j++)
			array[i][j] = (i*j);
	//输出
	for (int i = 0; i <3; i++)
	{
		for (int j = 0; j <3; j++)
			cout<<array[i][j] << "   ";
		cout<<endl;
	}
	cout << "------------" << endl;
	array.resize(5);//二维数组包含5个向量
	array[3].resize(3);//第4个向量包含3个元素
	array[4].resize(3);//第5个向量包含3个元素
	//现在是5X3的数组了
	for (int i = 0; i <5; i++)
		for (int j = 0; j <3; j++)
			array[i][j] = (i*j);
	for (int i = 0; i <5; i++)
	{
		for (int j = 0; j <3; j++)
			cout <<array[i][j] << "   ";
		cout <<endl;
	}
}

初始化二维数组

vector<vector <int> > ivec(m ,vector<int>(n,0));    

//m*n的二维vector,所有元素为0


猜你喜欢

转载自blog.csdn.net/duan19920101/article/details/56278154