You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:30:04