基础std::数组的正确类型
Proper type for underlying std::array
我对C++还很陌生,所以如果答案很明显,我很抱歉。
我一直在写一个STL风格的自定义数据结构,以此来提高我的技能。(事实上,我对这种结构也有实际的需求,但出于研究目的,我有点过头了。)
这个结构需要动态调整大小(就像向量一样),在我的第一稿中,我将底层的"容器"制作成了一个C风格的数组,并手动执行所有的分配和取消分配。我正在重构,我想使用C++11风格的std::数组作为我的底层结构,只是为了让代码更干净一点。我的问题是,我不知道如何以允许调整大小的方式声明数组类成员。由于不同的模板参数需要不同的类型,所以我不能只将成员声明为数组,然后在调整大小时将相同的变量分配给数组。
我考虑过为每个潜在规模宣布一个成员,比如
private:
array<T, 8>
array<T, 16>
array<T, 32>
...
但我不希望这些数组中的每一个都默认构造t成员。
这里有干净的解决方案吗?还是我必须坚持使用C风格的数组?
谢谢你的帮助。
编辑:
重读了我的问题之后,我觉得其实没有什么意义。我知道std::数组的大小必须在编译时知道,但由于某种原因,我的大脑推断我的目标是不可能的。对我来说,现在很明显,我被C风格的数组和堆所困扰。我想我只需要把它写出来就可以了。
谢谢你的回答。
std::array
表示一个数组,其大小是静态已知的(即在编译时),因此它不能用于只有在运行时才知道大小的情况。
只需使用std::vector
,它就有一个以大小为参数的构造函数。
std::array
是专门设计为不可调整大小的。它主要是解决固定大小数组不是一流值类型这一事实的一种变通方法。
我能想到的唯一用例是某种外部化或序列化的对象(存储在磁盘上或通过套接字传递,或者类似的东西),其中有一个动态大小的组件。如果您已经为此定义了一种格式,那么您可能应该坚持现有的格式。如果在编译时大小未知,则尝试为此重用std::array<>
将不起作用。
如果你想重构,可能有用的是一个模板类,它可以将C数组作为构造函数参数,但为它提供一个STL容器接口
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 类型数组?
- 如何在使用 make_unique<T[]>() 制作的模板类型数组上使用 std::fill?
- 将基本类型数组中的内存重新用于不同(但仍然是基本)类型的数组合法吗
- 在C++中返回基元类型数组(Java比较)
- 如何返回 QVariant 类型数组
- 如何在本机 c++ jni 中实现 java 类型数组
- 模板类型数组的模板类型数组
- 如何确定未知类型数组的索引是否为空
- 复杂类型数组的静态初始化
- 访问基类型数组成员(Int-to-type习惯用法)
- 如何将 char 类型数组传递给函数并将第一个字符数组复制到第二个图表数组并使用 c++ 进行比较
- 如何在C 中制作结构类型数组
- 如何创建结构类型数组的地图对象
- C++类类型数组
- C++中的Matlab类型数组
- 节点C++插件 - 当类型数组(Float32Array)作为参数传递时,如何访问它?
- 如何将二维字符类型数组逐行保存到 c 中的.txt文件中
- C++:用户定义的类型数组出错
- 在双精度类型数组中使用 memset()