如何在C++二维vector的指定位置使用insert()插入元素?
二维vector的insert()用法及常见误区
首先明确:C++的vector是0起始索引,也就是第一行的索引是0,第一列的索引也是0。你的示例中,目标位置是第三行、第四列,对应正确的索引是行索引2,列索引3;而你代码里的x=4超出了初始4行的索引范围(0-3),会导致错误。
两种场景的解决方案
场景1:确实需要插入元素(该行元素数量增加)
insert()的作用是在指定位置插入新元素,会让容器的大小+1。如果你要在某行的指定列插入1,需要先获取该行的一维vector,再调用它的insert方法,参数是插入位置的迭代器和要插入的值。
示例代码:
#include <vector> using namespace std; int main() { // 初始化4行5列的二维vector,所有元素为0 vector<vector<int>> board(4, vector<int>(5, 0)); int target_row = 2; // 对应第三行(0起始索引) int target_col = 3; // 对应第四列(0起始索引) // 在目标行的目标列位置插入1 board[target_row].insert(board[target_row].begin() + target_col, 1); // 此时该行元素变为:0 0 0 1 0 0(从5个元素变为6个) return 0; }
场景2:实际是想替换指定位置的值(更符合你的示例需求)
你的目标结果中该行元素数量没有变化,这说明你其实是想替换该位置的0为1,这种情况不需要用insert(),直接通过索引赋值即可:
示例代码:
#include <vector> using namespace std; int main() { vector<vector<int>> board(4, vector<int>(5, 0)); int target_row = 2; int target_col = 3; // 直接替换目标位置的值为1 board[target_row][target_col] = 1; // 此时该行元素为:0 0 0 1 0,和你的示例目标一致 return 0; }
内容的提问来源于stack exchange,提问作者Shamil Magomedov
相关产品推荐
相关产品推荐

