[英]C++ alternatives to std::array when the size is fixed, but not a constexpr?
如果我不想提供 constexpr 大小, std::array<...>
的最佳替代品是什么? 我认为最好只使用std::vector
并在其上执行reserve(...)
,但也许我忽略了一些东西?
如果需要在运行时确定大小, std::vector
应该是正确选择的容器。
是的,使用std::vector
。
所以如果你的代码是
std:array<int, 42> my_array;
将其替换为
std:vector<int> my_array(42);
注意:您可能不想使用reserve
,因为它会将vector
留空。 如果您使用的是std::array
,则您的代码没有空数组的概念,因此最好由在构造时填充且从不调整大小的std::vector
实例表示。
std::vector<>
可能是你的答案。 我只是不会假设reserve()
保证任何加速。
比亚恩·斯特劳斯特鲁普:
人们有时会担心 std::vector 逐渐增长的成本。 我曾经担心这一点并使用 Reserve() 来优化增长。 在测量我的代码并在实际程序中反复发现 Reserve() 的性能优势后,我停止使用它,除非需要避免迭代器失效(在我的代码中很少见)。 再次:在优化之前进行测量。
http://www.stroustrup.com/bs_faq2.html [参见“为什么标准容器这么慢?”的底部]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.