1.采用C++的vector定义二维数
int main()
{
//matrix.size(); 二维数组有多少行
//matrix[i].size(); 每行有多少列
vector< vector<int> > matrix(3); //vector创建二维数组,多少行
for (int i = 0; i < 3; ++i) {
matrix[i].resize(3); //设置多少列
}
int a=1;
for (int i = 0; i < 3; ++i) { //创建二维数组方法
for (int j = 0; j < 3; ++j) {
matrix[i][j]=a; //不能使用matrix[i].push_back(a);
a++;
}
}
//遍历二维数组,使用迭代器(指针)遍历
for (int i = 0; i < matrix.size(); ++i) {
for(vector<int>::iterator it=matrix[i].begin();it<matrix[i].end();it++)
cout<<*it<<" ";
}
//vector赋值方法,将自己的部分赋值给自己,相当于截取前两个元素
matrix[0].assign(matrix[0].begin(),matrix[0].begin()+1);
//vector的元素操作,两种,1.直接使用下标,2.使用at(int x)函数
cout<<matrix[0].at(1); //访问第一行,第二列的元素
cout<<matrix[0][1]; //访问第一行,第二列的元素return 0;
}
实例:螺旋矩阵 题目网址:url
描述:
给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。
示例1
输入:
[[1,2,3],[4,5,6],[7,8,9]]
返回值:
[1,2,3,6,9,8,7,4,5]
算法思想描述:
采用上右下左的顺序依次遍历矩阵中的元素,完成一次,left--,right--,down--,up--;
算法实现:
#include <iostream>
#include <algorithm> //算法的头文件,里面有好多算法,max,min,reserve等#include <vector>
using namespace std;
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int> result = {}; //定义一个空的vector
int ranks=matrix.size(); //矩阵的行数
if (ranks == 0) //矩阵0行,不存在,返回空
return result;
int columns=matrix[0].size(); //矩阵的列数
int left=0,right=columns-1,up=0,down=ranks-1; //定义上下左右的初始值,
int count=0; //计数器,用于判断是否访问完二维数组(矩阵)
while (true)
{
for(int i=left;i<=right;i++) //从左到右访问矩阵,依次把矩阵中的元素放入result中
{
result.push_back(matrix[up][i]); //从左向右访问,行号为up,列号在left和right之间
count++; //计数器++
if (count == ranks*columns) //判断是否遍历完矩阵
return result;
}
up++; //从左向右访问完1次,up+1
for (int i = up; i <=down ; i++) //从上到下访问
{
result.push_back(matrix[i][right]);
count++;
if (count == ranks*columns)
return result;
}
right--;
for (int i = right; i >= left ; i--) //从右向左访问
{
result.push_back(matrix[down][i]);
count++;
if (count == ranks*columns)
return result;
}
down--;
for (int i = down; i >= up ; i--) //从下向上访问矩阵
{
result.push_back(matrix[i][left]);
count++;
if (count == ranks*columns)
return result;
}
left++;
}
}
};
int main()
{
vector< vector<int> > matrix(3); //vector创建二维数组,多少行
for (int i = 0; i < 3; ++i) {
matrix[i].resize(3); //多少列
}
int a=1;
for (int i = 0; i < 3; ++i) { //创建二维数组方法
for (int j = 0; j < 3; ++j) {
matrix[i][j]=a; //不能使用matrix[i].push_back(a);
a++;
}
}
Solution x;
vector<int> t= x.spiralOrder(matrix);
for (int i = 0; i < t.size(); ++i) {
cout<<t[i]<<" ";
}
return 0;
}
测试结果:
2.C语言直接定义二维数组
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
int main()
{
int n,num;
int sum=0;
cin>>n;
int array[n][n];
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>num;
array[i][j]=num;
sum+=array[i][j];
}
}
cout<<sum<<endl;
}
经验之谈:
刷题时候,直接使用c++的STL,尽量不要使用c语言麻烦,推荐使用第一种二维数组,一般用vector可以模拟数组,矩阵,队列,栈....