怎样初始化二维vector

怎样初始化二维vector二维vector的初始化方法总结初始化一个二维vector,行M,列N学会用大括号初始化二维数组初始化一个二维vector,行M,列不固定初始化一个二维vector,行列都不固定leetcode相关例题以定义一个二维整形数组并初始化为例:初始化一个二维vector,行M,列N//初始化一个二维的matrix,行M,列N,且值为0vector<vector<int&g…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

以定义一个二维整形数组并初始化为例:

初始化一个 二维vector,行M,列N

// 初始化一个 二维的matrix, 行M,列N,且值为0
vector<vector<int>> matrix(M,vector<int>(N));
//等价于下面的
vector<vector<int> > matrix(M); 
for(int i=0;i<M;i++) { 
   
    matrix[i].resize(N);
}
//等价于下面的
vector< vector<int> > matrix;
matrix.resize(M);//M行
for(int i=0;i<matrix.size();i++){ 
   
    matrix[i].resize(N);//每一行都是N列
}
    
// 初始化一个 二维的matrix, 行M,列N,且值自定义为data;
vector<vector<int>> matrix(M,vector<int>(N,data));

Jetbrains全家桶1年46,售后保障稳定

学会用大括号初始化二维数组

//初始化空的二维vector,到底是{}还是{ 
   {}},请看最下面的两个leetcode例题
vector<vector<int>> matrix1{ 
   };
或者
vector<vector<int>> matrix1{ 
   { 
   }};

//初始化列表
vector<vector<int>> matrix2{ 
    { 
   1},{ 
   1,1} };//学会用大括号初始化二维数组
matrix1.push_back({ 
    1,2,1 });//插入

初始化一个 二维vector,行M,列不固定

vector<vector<int>>matrix(M);//M行,列数不固定

int col;
vector<int> temp;
for(int i=0;i<M;i++){ 
   
    cout<<”please input the col of ”<<i<<” row”<<endl;
    cin>>col;//确定第i行的列数
    cout<<i<<” row has ”<<col<<” col”<<” please input these”<<endl;
    for(int j=0;j<col;j++{ 
   
        int data;
        cin>>data;
        temp.push_back(data);
    }
    matrix[i]=temp;
    temp.clear();
}

初始化一个二维vector,行列都不固定

#include <iostream>
#include<vector>
using namespace std;
int main()
{ 
   
    vector<vector<int>> matrix;//行,列数不固定
    cout << "please input rows of matrix: " << endl;
    int rows;
    cin >> rows;
    matrix.resize(rows);
    int col;
    vector<int> temp;
    for (int i = 0; i < rows; i++) { 
   
        cout << "please input the cols of " << i << "th row" << endl;
        cin >> col;//确定第i行的列数
        cout << i << "th row has " << col << " cols," << "please input these" << endl;
        for (int j = 0; j < col; j++){ 
   
            int data;
            cin >> data;
            temp.push_back(data);
        }
        matrix[i] = temp;
        temp.clear();
    }

    cout << "output matrix:" << endl;
    for (int i = 0; i < matrix.size(); i++) { 
   
        for (int j = 0; j < matrix[i].size(); j++) { 
   
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
    cout << endl;
    return 0;
}

测试结果如下:
在这里插入图片描述

注意初始化二维vector为空时的情况

leetcode例题1

118.杨辉三角

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]

class Solution { 
   
public:
    vector<vector<int>> generate(int numRows) { 
   
        //学会用大括号初始化二维数组
        if(numRows==0) return{ 
   };
        if(numRows==1) return{ 
   { 
   1}};
        if(numRows==2) return{ 
   { 
   1},{ 
   1,1}};

        vector<vector<int>> ans(numRows);
        ans[0]={ 
   1};
        ans[1]={ 
   { 
   1},{ 
   1}};
        vector<int> temp;
        for(int i=3;i<=numRows;i++){ 
   
            temp.push_back(1);
            for(int j=0;j<i-2;j++){ 
   
                temp.push_back(ans[i-2][j]+ans[i-2][j+1]);
            }
            temp.push_back(1);
            ans[i-1]=temp;
            temp.clear();
        }
        return ans;
    }
};

leetcode例题2

前面一题返回空的二维vector时,返回的是{}

但是今天遇到一个题,在返回空的二维vector时,必须返回{
{}}

题目记录如下:
面试题 08.04. 幂集
幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。
说明:解集不能包含重复的子集。
示例:
在这里插入图片描述
解题思路:
1.递归,
2.回溯

这里只讲递归的解法:
subsets([1,2,3])={[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]}
subsets([1,2])={[],[1],[2],[1,2]}

可以发现
subsets([1,2,3])=subsets([1,2]) + subsets([1,2])中的每一个子集中插入3

vector<vector<int>> subsets(vector<int>& nums) { 
   
        int N=nums.size();
        //注意这里必须返回{ 
   {}},不能是{}
        if(N==0) return{ 
   { 
   }};
        
        int tail=nums.back();
        nums.pop_back();
        //递归
        vector<vector<int>> sub=subsets(nums);
        //注意nums是引用,所以在底层递归向上层递归返回时,要恢复删除的尾部元素
        nums.push_back(tail);

        vector<vector<int>> res(sub);
        for(auto& i:sub){ 
   
            i.push_back(tail);
            res.push_back(i);
        }
        return res;
    } 

这里只想关注一个点,针对这一题,当nums.size()==0时,我们返回空的二维vector,必须是 {
{}}

由上面两个例题可以看出,对于空的二维vector,可能是用{}初始化,也可能是用{
{}}初始化,具体用哪一种,得看一下题目在返回空的二维vector时,要求返回的是啥,

  • 如果题目在返回空的二维vector时,返回的是 [],这是我们程序中对应用{};
  • 如果题目在返回空的二维vector时,返回的是 [[]],这是我们程序中对应用{
    {}};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/213413.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • java注解拦截_轻松实现java拦截器+自定义注解

    java注解拦截_轻松实现java拦截器+自定义注解本文将用简洁的代码构建一个springboot的拦截器。拦截器的使用很简单,定义一个自己的拦截器,向配置中添加一下就可以使用。为了方便,之后又引入了注解。目录和概述概述假设需求:访问项目的controller是都要进行”token验证”,除了某些像登录之类的方法。项目结构:TokenInterceptor.java自定义拦截器InterceptorConfig.java添加拦截器进入项目NoN…

  • idea 运行单个main方法_idea如何运行main方法[通俗易懂]

    idea 运行单个main方法_idea如何运行main方法[通俗易懂]使用IntelliJIdea打包可执行JAR1、Model结构如下:…IDEA发布1.8.1配置编译class的环境1.8.2配置web环境1.8.3发布到tomcat运行环境中1.8.4启动运行1.8.5发布到war文件操作完成后进入下一……Main-Class:Main这边Main既是运行类,含有main()方法的一个类文…

  • linux使用ps命令查看和控制进程_shell查看进程

    linux使用ps命令查看和控制进程_shell查看进程ps命令Linuxps(英文全拼:processstatus)命令用于显示当前进程的状态,类似于windows的任务管理器查看所有进程ps-A显示所有进程信息,连同命令行ps-

  • ssb门限_SSB调制「建议收藏」

    ssb门限_SSB调制「建议收藏」1基于SystemView的模拟线性调制系统仿真3.1.1AM调幅一、实验目的:1.熟悉使用SystemView软件,了解各部分功能软件的操作和使用方法。2通过实验进一步观察.了解模拟信号AM调制、解调原理。3掌握AM调制信号的主要性能指标4比较、理解AM调制的相干解调和非相干解调原理。二、实验内容用SystemView构造一个AM调制、解调系统,观察个模块输出波形,了解AM调制、解调原理,…

  • MyBatis模糊查询的4种实现方式

    MyBatis模糊查询的4种实现方式1、根据姓名模糊查询员工信息1.1、方式一步骤一:编写配置文件步骤二:测试步骤三:分析此种方式需要在调用处手动的去添加“%”通配符。1.2、方式二说明:使用方式一可以实现模糊查询,但是有一点不方便的地方就是:在测试类中,调用selectList()方法传参时需要调用者手动的添加%号通配符,显然是麻烦的,能否在映射配置文件中直接将%号写好呢?有的朋友可能会这么想,好办,直接在配置文件中这么写:形如1:测试后发现,程序会报错,原因是:缺少单引号。这…

    2022年10月28日
  • Cloudra公司CCP:DS——认证数据专家

    Cloudra公司CCP:DS——认证数据专家

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号