繁体   English   中英

当大小固定但不是 constexpr 时,C++ 替代 std::array 吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM