替换std :: array的C ++

时间:2016-06-16 19:38:38

标签: c++ arrays vector

如果我不想提供constexpr尺寸,std::array<...>的最佳替代品是什么?我认为最好只使用std::vector并对其进行reserve(...),但也许我会忽视某些内容?

3 个答案:

答案 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;]