tan90dx

多维数组和矩阵常考题型解析
C++声明多维数组的方法由于多维数组这在程序设计中应该是算非常基础的内容了,所以我们就不过多的纠缠语法,这里就只简...
扫描右侧二维码阅读全文
25
2019/04

多维数组和矩阵常考题型解析

C++声明多维数组的方法

由于多维数组这在程序设计中应该是算非常基础的内容了,所以我们就不过多的纠缠语法,这里就只简单的讲一下如何声明多维动态数组。
由于c++11之后不允许使用变量构造动态数组

int m,n;
cin>>m>>n;
int nums[m][n];

上面的代码在c++11之后是不被允许的,所以c++11之和只能使用下面两种方法创建多维动态数组。

1.使用new创建指向指针的指针

int m,n;
int **nums=new int*[m];//创建m个指向整型的指针的指针。
for(int i=0;i<m;i++)//循环,为每m个指针指向一个长度为n的数组
{
    nums[i]=new int[n];
}

2.使用向量vector

vector是STL中的顺序动态容器,在使用中常常将其看做动态数组,当然在c++11之后引入了stl容器array,弥补了c++数组那要死不活的东西。。(真的无力吐槽,连直接获取数组中元素长度都没办法实现,数组传参的时候还会退化成指针。。。),但由于很多竞赛都不支持c++11,所以我们还是来讲vector吧。
使用vector又有两种方法:

构造函数法

int  m,n;
cin>>m>>n;
vector<vector<int> >nums(m,vector<int>(c,0));//构造m个整型向量类型的向量,这些整形向量的内容是n个0

这样声明的意思参见vector的构造函数,第二条

构造拥有 count 个有值 value 的元素的容器,那么在这里,也就是构造了m个vector<int>(c,0)的向量,每个vector<int>的内容是n个0。
另外需要注意的是c++11之前vector<vector<int> > 中的那个空格是必须的,否则会报错。

resize()成员函数法

int m,n;
cin>>m>>n;
vector<vector<int> >num;
num.resize(m);
for(int i=0;i<m;i++)
{
    num[i].resize(n);
}

resize是vector的成员函数,resize的声明如下

差不多就是这么多,嗯哼,所以具体用那种方法,还是要针对竞赛所采用的c++标准来定。


实践

顺时针打印二位数组

给定一个矩阵,顺时针打印矩阵的内容
样例输入:

 1 2 3 4
5 6 7 8
9 1 2 3
4 5 6 7

样例输出:

1 2 3 4 8 3 7 6 5 4 9 5 6 7 2 1

最后修改:2019 年 05 月 29 日 04 : 00 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论