如果我不想提供constexpr尺寸,std::array<...>
的最佳替代品是什么?我认为最好只使用std::vector
并对其进行reserve(...)
,但也许我会忽视某些内容?
答案 0 :(得分:17)
std::vector
应该是正确的容器选择。
答案 1 :(得分:7)
是的,请使用std::vector
。
所以,如果您的代码是
std:array<int, 42> my_array;
将其替换为
std:vector<int> my_array(42);
注意:您可能不想使用reserve
,因为它会使vector
为空。如果您使用的是std::array
,那么您的代码并不具有空数组的概念,因此最好由构造时填充的std::vector
实例表示,并且从不调整大小。
答案 2 :(得分:4)
std::vector<>
可能是你的答案。我不会假设reserve()
保证任何加速。
Bjarne Stroustrup:
人们有时会担心std :: vector增长的成本 增量。我曾经担心这一点,并使用reserve()来 优化增长。在测量我的代码并反复拥有之后 无法在实际中找到reserve()的性能优势 程序,我停止使用它,除非需要避免 迭代器失效(在我的代码中很少见)。再次:先测量 你优化。
http://www.stroustrup.com/bs_faq2.html [参见&#34的底部;为什么标准容器这么慢?&#34;]