定义二维数组的方法

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可以模拟数组,矩阵,队列,栈....

posted @ 2021-07-08 00:07  nanfengnan  阅读(743)  评论(0编辑  收藏  举报