我正在寻找类似于std::vector
的C ++数据类型,但没有与动态调整大小相关的开销。容器的大小在其生命周期内保持不变。我考虑使用boost::array
,这是不合适的,因为它需要在编译时知道数组的大小,在我的情况下不是这种情况。
答案 0 :(得分:15)
在使用非标准的任何内容之前,测量动态调整大小是否确实对性能产生任何影响。
提示:使用vector.reserve永远不会有任何数组重新分配。
答案 1 :(得分:10)
如果不重新分配std :: vector,则重新分配没有开销。所以:
std::vector x(100)
)答案 2 :(得分:4)
由std::vector
的动态调整大小功能引起的开销几乎不存在。
如果你需要一个编译时大小的数组,在许多情况下寻找比std::vector
更有效的东西确实是个好主意。
但固定运行时大小和动态运行时大小之间的差异可以忽略不计。在这种情况下,std::vector
是一个完美的解决方案。
答案 3 :(得分:2)
我使用了基于STLSoft auto_buffer
的想法的模板类(我将自己的实现拼凑在Matthew Wilson的不完美的C ++书籍以及STLSoft实现的一些想法中)。它默认在堆栈上(或嵌入在类对象中)分配数组(如果它足够小)(基于您提供的模板参数)。如果运行时分配大于此值,则阵列存储来自堆。
http://www.stlsoft.org/doc-1.9/classstlsoft_1_1auto__buffer.html
所以关于这个类的好处是,对于较小的小尺寸,分配基本上是无操作。
答案 4 :(得分:1)
如果在编译时不知道数组的大小,那么C ++中唯一的选项是动态分配的数组。您可以使用std::vector
来保证RAII。正如其他人所说,std::vector
s可以调整大小的事实并不意味着你必须调整它们的大小。创建具有正确大小的std::vector
,然后不要调用任何可以调整大小的内容。