C++中的vector二维数组(全面详解)

目录

二维数组概念:

二维数组格式:

二维数组的初始化:

在创建的时候就进行初始化:

resize初始化:

构造v的时候只给行数,列数用resize开辟

构造v的时候不给行数不给列数,都用resize来开辟

二维数组的使用:

插入一行

插入一列

删除一行

删除一列

二维数组经典例题:


二维数组概念:

多个数组叠加,形成一个有行有列的矩形数组。

C语言中,可以开辟一个二维数组,C++中怎么来开辟一个二维数组呢? 

二维数组格式:

vector<vector<int>>   table(size1,vector<int>(size2,0)

代码解释:由图可以看出上面代码是由三个vector<int>组成的,所以size1的大小是vector<int>类型的数量,size2的大小是每个vector<int>里存的int类型的数量。'0'就是初始化的内容。

二维数组的初始化:

在创建的时候就进行初始化:

vector<vector<int>> v1(row, vector<int>(col));

 row:行数,col:列数,初始值:0

resize初始化:

vector<vector<int>> v(row); 
for(int i=0;i<row;i++) {
    v[i].resize(col);
} 

构造v的时候只给行数,列数用resize开辟

vector<vector<int>> v;
v.resize(row);
for(int i=0;i<row;i++){
    matrix[i].resize(col);
}

构造v的时候不给行数不给列数,都用resize来开辟

vector<vector<int>> v1(row, vector<int>(col,N));

 与第一个一样,只不过N是初始值,而第一个什么也不给就默认初始为‘0’

二维数组的使用:

插入一行

//插入一行数组:将in_row数组插入到第2行后面 
vector<int> in_row(5,6);//初始化一个数组,包含5个元素并且全为6
v.insert(v.begin()+2,in_row);

插入一列

//插入一列数据到第二列后面
for(int i=0;i<v.size();i++)
{
	v[i].insert(v[i].begin()+2,9);
}

删除一行

//删除从第二行后面到第三行
v.erase(v.begin() + 2, v.begin() + 3);

删除一列

//删除a的第二列
for (int i = 0; i < a.size(); i++)
{
	a[i].erase(a[i].begin() + 2, a[i].begin() + 3);
}

 

二维数组经典例题:

题目:杨辉三角形
链接:118. 杨辉三角icon-default.png?t=O83Ahttps://leetcode.cn/problems/pascals-triangle/

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> vv(numRows);//定义一个二维数组,初始化行数
        for(size_t i = 0;i < vv.size();i++){
            vv[i].resize(i+1,0);//手动开辟空间
            vv[i][0] = vv[i][vv[i].size()-1] = 1;//将每一行的起始位置和终点位置设置为1
        }

        for(size_t i = 0;i < vv.size();i++){
            for(size_t j = 0;j < vv[i].size();j++){
                if(vv[i][j] == 0){
                    vv[i][j] = vv[i-1][j]+vv[i-1][j-1];//推导出递推公式并转化为代码
                }
            }
        }
        return vv;
    }
};

感谢大家观看!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值