在C++编程中,数组是一种基本的数据结构,用于存储固定大小的元素集合。然而,当数组的大小是可变的时候,不能像声明静态数组那样声明动态数组。例如,不能使用如下语法:
int a[n1][n2];
通常,会使用std::vector
来创建动态数组,但这需要手动构造:
int n1 = 5;
int n2 = 6;
std::vector
这种方法会多次分配内存,因此效率较低。希望能够一次性分配内存。但是,直接使用如下方法会导致崩溃:
std::vector
为了避免这种情况,需要使用循环来初始化内存。
C++11引入了变长模板,这为提供了帮助。可以编写一个递归函数,接受多个参数(声明数组的维度),并修改传递给它的内存指针,使其转换为多维数组是安全的。如果传递了nullptr
,则返回分配所需的字节数。
例如,对于单维数组:
int j = 0x21;
size_t n1 = CreateArrayAtMemory(nullptr, 2);
vector
预期输出:
33 34
2 bytes used
现在,对于二维数组2x3的short
:
int j = 0x21;
size_t n2 = CreateArrayAtMemory
预期输出:
33 34 35 36 37 38
20 bytes used