• 定义二维数组的方法


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

  • 相关阅读:
    docker部署项目,对镜像,容器的操作
    技术汇总:第十六章:关于登录与退出的token
    关于EZDML数据库表结构制作设计工具使用踩的坑
    技术汇总:第十七章:支付宝对接公钥,私钥
    集成Mybatis
    解决errorCode 0, state 08001 报错
    Spring缓存注解@Cacheable,@CachePut , @CacheEvict
    解决:Could not initialize class org.hibernate.validator.internal.engine.Configura
    @ConditionalOnMissingBean注解的作用
    解决:WARNING: An illegal reflective access operation has occurred
  • 原文地址:https://www.cnblogs.com/nanfengnan/p/14984281.html
Copyright © 2020-2023  润新知