You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中如何使用push_back和insert将3x3二维vector扩容为4x4

C++ 二维vector棋盘扩容问题解答

问题定位

你提到的第4列并不真实存在,这是你代码报错的核心原因:

  • 右下扩容函数仅给二维vector新增了底部一行,没有给所有原有行的末尾新增列元素,所有行的长度仍为原来的3,访问索引3(第4列)自然触发越界错误
  • 左上扩容函数仅在顶部插入了一行,没有给所有原有行的开头插入列元素,所有行的长度仍为原来的3,自然不会向左扩充

扩容实现逻辑

要实现NxN棋盘向任意方向扩容为(N+1)x(N+1),需要分别完成行扩容和列扩容两个步骤:

右下扩容步骤

  1. 遍历所有原有行,在每行末尾插入1个+,完成向右的列扩容
  2. 在二维vector末尾插入1行长度为(N+1)的+,完成向下的行扩容

左上扩容步骤

  1. 遍历所有原有行,在每行开头插入1个+,完成向左的列扩容
  2. 在二维vector开头插入1行长度为(N+1)的+,完成向上的行扩容

修正后的代码

初始定义

int grid_size = 3;
vector<vector<char>> grid(grid_size, vector<char>(grid_size, '.'));

右下扩容函数

void expand_grid_down_right(vector<vector<char>>& grid){
    int old_size = grid.size();
    // 向右扩充列:给所有原有行末尾加+
    for (int i = 0; i < old_size; i++) {
        grid[i].push_back('+');
    }
    // 向下扩充行:新增一行全+
    vector<char> new_row(old_size + 1, '+');
    grid.push_back(new_row);
}

左上扩容函数

void expand_grid_up_left(vector<vector<char>>& grid){
    int old_size = grid.size();
    // 向左扩充列:给所有原有行开头加+
    for (int i = 0; i < old_size; i++) {
        grid[i].insert(grid[i].begin(), '+');
    }
    // 向上扩充行:顶部插入一行全+
    vector<char> new_row(old_size + 1, '+');
    grid.insert(grid.begin(), new_row);
}

通用扩容扩展

如果需要一次扩容k格而非1格,只需修改对应逻辑的循环次数/插入元素个数即可,无需更改整体结构。

内容的提问来源于stack exchange,提问作者Katri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:45:01