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;
}