C++用vector<vector<int>>来表示二维数组

C++用vector<vector>来表示二维数组;必须先将vector<vector>定义为二维数组,才能像对待数组一样对其赋值;
注意有一些编译器在写vector<vector>时会报错,因为符号“>>”之间需要加个空格;

a、vector<vector> A;//错误的定义方式 //c++11标准中,已不再错误,而是作为标准退行。
b、vector<vector > A;//正确的定义方式
这两种方式其实目前在C++11新标准中都是正确的,在早期版本的C++标准中,如果vector的元素还是vector,则需如上所示,现在已不需要。

1、将vector<vector>定义为二维数组;

// 此处的m是初始化a的大小,m=array.size(),而不是初始值;
vector<vector<int> > a(m);
//初始化一个m*n的二维数组
	for(int i=0;i<m;i++)
	{
		a[i].resize(n);
	}

2、赋值;

//现在像二维数组那样赋值即可;
for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++)
		{
			a[i][j] = (3*i+j+1);			
		}
	}

例题:计算两个矩阵和;

#include <iostream>
#include <vector>
using namespace std;

//1. 纠正原文中的一个错误:
//vector<vector<int>> A;//错误的定义方式  //c++11标准中,已不再错误,而是作为标准退行。
// 需要加一个空格; 
//vector<vector<int> > A;//正确的定义方式

vector<vector<int> > sum(vector<vector<int> > b,vector<vector<int> > c)
{
	//此处同样需要先将a定义为二维数组结构; 
	vector<vector<int> > a(4);
	for(int i=0;i<4;i++)
	{
		a[i].resize(3);
	}
//	vector<int> a2;
	for(int i=0;i<b.size();i++)
	{
		for(int j=0;j<b[i].size();j++)
		{
			a[i][j]=b[i][j]+c[i][j];
		}
	}
	return a;
}

int main()
{
//要先定义好二维数组结构,才能直接像二维数组一样赋值; 否则程序没办法往后面运行的; 
	vector<vector<int> > b1(4);
	vector<vector<int> > c1(4);
//不能直接写 vector<vector<int> > a1;需要初始化大小; 
	vector<vector<int> > a1(4);
	
	for(int i=0;i<4;i++)
	{
		b1[i].resize(3);
	}
	for(int i=0;i<4;i++)
	{
		c1[i].resize(3);
	}
	for(int i=0;i<4;i++)
	{
		a1[i].resize(3);
	}
	
//vector<vector<int> >赋值: 
	for(int i=0;i<4;i++)
	{
		for(int j=0;j<3;j++)
		{
			b1[i][j] = (3*i+j+1);
			
		}
	}
	
	for(int i=0;i<4;i++)
	{
		for(int j=0;j<3;j++)
		{
			c1[i][j] = 3*i+j+1;
		}
	}
	
//显示vector<vector<int> >; 
	printf("Array b1: \n");
	for(int i=0;i<4;i++)
	{
		for(int j=0;j<3;j++)
		{
			printf("b1[%d][%d] = %d\t",i,j,b1[i][j]);
		}
		cout << endl;
	}
	
	printf("Array c1: \n");
	for(int i=0;i<4;i++)
	{
		for(int j=0;j<3;j++)
		{
			printf("c1[%d][%d] = %d\t",i,j,c1[i][j]);
		}
		cout << endl;
	}
	
	a1=sum(b1,c1);
	printf("Array a1: \n");
	for(int i=0;i<4;i++)
	{
		for(int j=0;j<3;j++)
		{
			printf("a1[%d][%d] = %d\t",i,j,a1[i][j]);
		}
		cout << endl;
	}
	
	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值