二维Vector指定位置插整数及对应元素相加异常求助
问题1:怎么在二维vector的指定位置插入整数?
这个得分两种常见场景来处理,看你是要给某一行插入单个元素,还是插入一整行:
给指定行的指定列插入单个元素:
假设你有个二维vector叫mat,想在第row行(从0开始计数)的第col列插入整数val,直接调用该行的insert方法即可,记得先确认目标行是存在的:// 先判断row是否在合法范围内 if (row >= 0 && row < mat.size()) { mat[row].insert(mat[row].begin() + col, val); }这里
begin()+col是指向第col个位置的迭代器,插入完成后,该位置及后续的元素会自动向后移位。插入一整行到指定位置:
如果要插入一整行(比如准备了一行vector<int> new_row = {1,2,3})到第row行的位置,直接调用二维vector的insert方法就行:mat.insert(mat.begin() + row, new_row);
问题2:二维vector对应位置相加结果不符合预期的问题
我看了你贴的代码,问题出在两个容易忽略的小细节上:
循环的行和列搞反了:
你外层循环遍历的是FirstMatrix[0].size()(也就是列数),内层循环遍历的是FirstMatrix.size()(行数),但访问元素时用的是FirstMatrix[i][z],这相当于把列索引当行用、行索引当列用,不仅可能触发越界,还会把元素取混,自然得不到正确结果。FinalMatrix没有预先分配空间:
你一开始定义的FinalMatrix是空的,既没有行,每行也没有对应的列空间,直接给FinalMatrix[i][z]赋值属于访问不存在的内存,会导致未定义行为(比如程序崩溃或者输出乱码)。
给你改好的可运行代码:
#include <iostream> #include <vector> using namespace std; int main() { vector<vector<int>> FirstMatrix = { {2, 3} , {3, 1} }; vector<vector<int>> SecondMatrix = { {2, 3} , {3, 1} }; vector<vector<int>> FinalMatrix; // 先给FinalMatrix分配和输入矩阵一致的空间 FinalMatrix.resize(FirstMatrix.size()); for (int i = 0; i < FirstMatrix.size(); i++) { FinalMatrix[i].resize(FirstMatrix[i].size()); } // 正确遍历:外层走行,内层走列 for(int i = 0; i < FirstMatrix.size(); i++) { for(int z = 0; z < FirstMatrix[i].size(); z++) { int VectorNum = FirstMatrix[i][z] + SecondMatrix[i][z]; FinalMatrix[i][z] = VectorNum; } } // 验证结果的输出代码 for (auto &row : FinalMatrix) { for (int num : row) { cout << num << " "; } cout << endl; } return 0; }
这段代码里,我先通过resize给FinalMatrix分配了和输入矩阵匹配的行数与列数,再调整了循环顺序,运行后就能得到你预期的{{4, 6}, {6, 2}}结果啦。
内容的提问来源于stack exchange,提问作者Taylor Damron

