C++开发推箱子游戏时如何创建可存储多维vector的指针数组
实现方案
方案1:固定长度原生指针数组(完全匹配你要求的赋值写法)
你需要存储的是vector<vector<char>>类型对象的地址,所以指针数组的元素类型为vector<vector<char>>*,直接声明即可:
// 声明长度为2的指针数组,每个元素都是指向二维char vector的指针 vector<vector<char>>* pointer[2]; // 直接按你期望的方式赋值 pointer[0] = &vector1; pointer[1] = &vector2;
访问时需要先解引用指针再取二维数组元素:
// 取第一个vector第i行第j列的元素 char val = (*pointer[0])[i][j];
方案2:动态长度指针容器(更适合推箱子多关卡场景)
如果你需要存储的二维vector数量不固定(比如多个关卡地图),更推荐用C++标准库的vector做容器存储指针,不需要提前固定长度:
// 声明存储二维char vector指针的动态容器 vector<vector<vector<char>>*> map_pointers; // 插入指针 map_pointers.push_back(&vector1); map_pointers.push_back(&vector2); // 也支持下标赋值(需要先扩容到对应长度) map_pointers.resize(2); map_pointers[0] = &vector1;
注意事项
- 要保证你指向的
vector1、vector2的生命周期长于指针数组/指针容器的使用周期,避免出现悬空指针导致程序崩溃。 - 如果需要自动管理生命周期,可以把二维vector用
shared_ptr<vector<vector<char>>>包装后再存储,不需要手动维护对象存活状态。
完整可运行示例
#include <vector> #include <iostream> using namespace std; int main() { // 示例二维vector,对应推箱子的两张地图 vector<vector<char>> vector1 = {{'#', ' ', '#'}, {' ', 'O', ' '}, {'#', ' ', '#'}}; vector<vector<char>> vector2 = {{'#', '#', '#'}, {'P', ' ', '*'}, {'#', '#', '#'}}; // 固定长度指针数组用法 vector<vector<char>>* pointer[2]; pointer[0] = &vector1; pointer[1] = &vector2; cout << (*pointer[0])[1][1] << endl; // 输出O // 动态指针容器用法 vector<vector<vector<char>>*> map_pointers; map_pointers.push_back(&vector1); map_pointers.push_back(&vector2); cout << (*map_pointers[1])[1][2] << endl; // 输出* return 0; }
内容的提问来源于stack exchange,提问作者micsban
相关产品推荐
相关产品推荐

