我之前也有这样的需求,但需要更加灵活,大小并非编译时固定,而是类似于 C 语言的那种 VLA (正好就是曾经有望入标准库但最终被放弃的 std::dynarray ),于是仿照 std::dynarray 和 std::vector 的 API 弄了个简单的实现:
https://github.com/cnbatch/dynarray默认在堆上分配,而非栈上分配。
我在里面提供了两种写法的版本。
写法 1 (位于 vla_nest/dynarray.hpp ):
int x = 100, y = 200;
int value = 5;
vla::dynarray<vla::dynarray<int>> vla_array(x, y, value); // 相当于 int[x][y],全部初始化为 5
写法 2 (位于 vla_cleanlily/dynarray.hpp ):
int x = 100, y = 200;
int value = 5;
vla::dynarray<int, 2> vla_array(x, y, value); // 意思同上例,其中<int, 2>的意思是,创建 int 类型的二维数组
写法 1 看起来更“传统”一点,这是我最初的习惯。后来有人跟我说弄成写法 2 这种更加美观,我想了想觉得很对,于是就加了这个版本。
创建完成后的用法就跟普通数组无异,都是
vla_array[3][1] = 100;
vla_array[5][5] = vla_array[2][2];