我对C++来说很新,所以我很抱歉如果对此的回答很明显。基础std :: array的正确类型
我一直在编写一个STL风格的自定义数据结构,以此来提高我的技能。 (实际上我对这个结构也有实际的需求,但是我为了学习的目的而有点过分。)
这个结构需要动态调整大小(像一个向量),在我的初稿中,我使底层“容器”成为C风格的数组,并手动完成所有的分配和解除分配。我正在重构,并且我想使用C++ 11样式的std :: array作为我的基础结构,只是为了使代码更简洁。我的问题是,我不知道如何以允许调整大小的方式声明数组类成员。由于不同的模板参数需要不同的类型,因此我不能只将成员声明为数组,然后在调整大小时将相同的变量分配给数组。
我想过声明一个成员对每个潜在规模,像
private:
array<T, 8>
array<T, 16>
array<T, 32>
...
,但我不希望每个这些阵列默认构造T成员的。
这里有干净的解决方案吗?或者我只需要坚持使用C风格的数组?
感谢您的帮助。
编辑:在重新阅读我的问题
后,我不认为这是有道理的,其实。我知道std :: array的大小在编译时必须知道,但由于某种原因,我的大脑推断我的目标是不可能的。现在看来很明显我坚持使用C风格的数组和堆。我想我只需要写出来清楚一点。
感谢您的回答。
如果你的结构像一个向量并且需要动态调整大小,为什么不使用向量作为底层结构,并在其上添加额外的功能? 'std :: array'是为了提供一个容器,它在编译时*已知大小,并不能为vector实现提供良好的基础。 – us2012
只需坚持动态,手动管理阵列。他们需要在某个层次上处理,而这个层次是'std :: vector'。如果你重新实现'std :: vector',那么你必须自己处理它们。 –