底层std :: array的正确类型

piy*_*iyo 0 c++ arrays std data-structures c++11

我对C++很陌生,所以如果答案显而易见,我会道歉.

我一直在编写STL风格的自定义数据结构,以此来提高我的技能.(我实际上对这个结构也有实际需要,但是为了学习目的,我会有点过火.)

这个结构需要动态调整大小(比如矢量),在我的初稿中,我使底层的"容器"成为C风格的数组,并手动完成所有的分配和解除分配.我正在重构,我想使用C++ 11风格的std :: array作为我的底层结构,只是为了让代码更清晰一些.我的问题是我不知道如何以允许调整大小的方式声明数组类成员.由于不同的模板参数需要不同的类型,因此我不能将成员声明为数组,然后在调整大小时将相同的变量分配给数组.

我想为每个可能的大小声明一个成员,比如

private:
    array<T, 8>
    array<T, 16>
    array<T, 32>
    ...
Run Code Online (Sandbox Code Playgroud)

但我不希望每个数组都默认构造T成员.

这里有干净的解决方案吗?或者我只需要坚持使用C风格的数组?

谢谢您的帮助.

编辑:

在重新阅读我的问题后,我认为实际上并不合理.我知道std :: array的大小必须在编译时知道,但出于某种原因我的大脑推断我的目标是不可能的.现在我觉得很明显,我坚持使用C风格的数组和堆.我想我只需要写出来就可以清楚地表达出来.

谢谢你的回答.

Jon*_*Jon 5

std::array 表示一个数组,其大小是静态已知的(即在编译时),因此它不能用于此类大小仅在运行时已知的情况.

简单地说std::vector,它有一个构造函数,它以size作为参数.