如何在C++中初始化行列尺寸不同的二维vector?
在C++中初始化指定尺寸的二维vector
要在C++中创建指定行列数的二维vector,你需要调整构造函数的参数写法,核心是理解vector<vector<int>>的本质是「存储vector<int>的容器」,而非Java风格的连续二维数组。
正确的初始化写法
直接通过构造函数完成初始化:
int myFunction(string text1, string text2) { int rows = text1.size() + 1; int cols = text2.size() + 1; // 外层vector有rows个元素,每个元素是一个大小为cols的vector<int> vector<vector<int>> arr(rows, vector<int>(cols)); // 后续逻辑... }
为什么你的代码报错?
你之前的代码vector<vector<int>> arr(text1.size() + 1, text2.size() + 1);错误在于:
vector<vector<int>>的第二个构造参数需要是一个vector<int>类型的对象(作为外层每个元素的初始模板),而你直接传入了一个整数(列数),编译器找不到匹配的构造函数,因此抛出no matching constructor错误。
另一种初始化方式:分步resize
如果需要后续动态调整尺寸,也可以先创建空的外层vector,再逐个resize内层:
int myFunction(string text1, string text2) { int rows = text1.size() + 1; int cols = text2.size() + 1; vector<vector<int>> arr; arr.resize(rows); // 先设置外层的行数 for (auto& row : arr) { row.resize(cols); // 给每一行设置列数 } // 后续逻辑... }
和Java写法的区别
Java中的int[][] arr = new int[m][n]是直接分配一块连续的内存空间作为二维数组;而C++的vector<vector<int>>是由多个独立的vector<int>组成的容器,每行的内存不一定连续,因此需要显式初始化每个内层vector的大小。
内容的提问来源于stack exchange,提问作者Saturnsbelt
相关产品推荐
相关产品推荐

