C++中如何使用push_back和insert将3x3二维vector扩容为4x4
C++ 二维vector棋盘扩容问题解答
问题定位
你提到的第4列并不真实存在,这是你代码报错的核心原因:
- 右下扩容函数仅给二维vector新增了底部一行,没有给所有原有行的末尾新增列元素,所有行的长度仍为原来的3,访问索引3(第4列)自然触发越界错误
- 左上扩容函数仅在顶部插入了一行,没有给所有原有行的开头插入列元素,所有行的长度仍为原来的3,自然不会向左扩充
扩容实现逻辑
要实现NxN棋盘向任意方向扩容为(N+1)x(N+1),需要分别完成行扩容和列扩容两个步骤:
右下扩容步骤
- 遍历所有原有行,在每行末尾插入1个
+,完成向右的列扩容 - 在二维vector末尾插入1行长度为(N+1)的
+,完成向下的行扩容
左上扩容步骤
- 遍历所有原有行,在每行开头插入1个
+,完成向左的列扩容 - 在二维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
相关产品推荐
相关产品推荐

