如何在C++中调整自定义类型的三维vector大小?
修复三维vector初始化问题
你的代码存在两个关键问题,导致无法正确创建目标三维vector:
- 变量名大小写不匹配:定义的三维vector变量是
Map(首字母大写),但调用resize时用的是map(全小写),C++区分大小写,这会直接触发编译错误。 - resize参数类型错误:三维vector的元素是二维vector(
vector<vector<Piece>>),但你传入的第二个参数是vector<Piece>(rows, colm),类型不匹配;同时colm作为Piece的初始化参数,除非Piece类有接受int的构造函数,否则也会报错。
根据你的需求(创建包含x个二维Piece类型vector的三维vector,每个二维vector按rows大小调整),给出两种正确写法:
写法1:每个二维vector初始化为rows个空的一维vector
如果只需要每个二维vector有rows个空位,后续再填充列数据:
int x; int rows; int colm; vector<vector<vector<Piece>>> Map; // 调整为x个二维vector,每个二维vector包含rows个空的vector<Piece> Map.resize(x, vector<vector<Piece>>(rows));
写法2:每个二维vector直接初始化为rows行colm列的Piece矩阵
如果需要每个二维vector直接是rows行、colm列的Piece结构(每个位置的Piece默认构造):
int x; int rows; int colm; vector<vector<vector<Piece>>> Map; // x个二维vector,每个二维vector有rows个元素,每个元素是包含colm个默认构造Piece的vector Map.resize(x, vector<vector<Piece>>(rows, vector<Piece>(colm)));
额外注意
- 确保
x、rows、colm在调用resize前已经被正确赋值,否则会使用未初始化的垃圾值,导致异常。 - 如果
Piece没有默认构造函数,需要在初始化vector<Piece>时传入合法的构造参数,比如vector<Piece>(colm, Piece(/*你的构造参数*/))。
内容的提问来源于stack exchange,提问作者Adam Gonzal
相关产品推荐
相关产品推荐

