0

我对 C++ 很陌生,所以如果这个问题的答案很明显,我很抱歉。

我一直在编写一个 STL 风格的自定义数据结构来提高我的技能。(实际上我也确实对这种结构有实际需求,但出于学习目的,我有点过火了。)

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

我考虑过为每个潜在的大小声明一个成员,比如

private:
    array<T, 8>
    array<T, 16>
    array<T, 32>
    ...

但我不希望这些数组中的每一个都默认构造 T 成员。

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

谢谢您的帮助。

编辑:

重新阅读我的问题后,我认为这实际上没有意义。我知道 std::array 的大小必须在编译时知道,但由于某种原因,我的大脑推断出我的目标是不可能的。现在对我来说似乎很明显,我被 C 风格的数组和堆困住了。我想我只需要写出来就可以完全清楚了。

感谢您的回答。

4

3 回答 3

5

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

简单地使用std::vector它,它有一个将大小作为参数的构造函数。

于 2013-02-07T16:36:06.397 回答
1

std::array专门设计为不可调整大小。这主要是解决固定大小数组不是一流值类型这一事实的解决方法。

于 2013-02-07T16:36:32.557 回答
1

我能想到的唯一用例是某种外部化或序列化对象(存储在磁盘上或通过套接字传递,或类似的东西),其中有一个动态大小的组件。如果您已经为此定义了格式,那么您可能应该坚持现有的格式。std::array<>如果在编译时不知道大小,则尝试重用它是行不通的。

如果您想重构,可能有用的是模板类,它可以将 C 数组作为构造函数参数,但为其提供 STL 容器接口。

于 2013-02-07T17:01:43.287 回答