使用std :: vector的开销?

Viv*_*sas 11 c++ stdvector dynamic-memory-allocation

我知道手动动态内存分配通常是一个坏主意,但它有时比使用更好的解决方案,比方说,std::vector

举一个粗略的例子,如果我必须存储一个n整数数组,其中n<= 16,比如说.我可以使用它来实现它

int* data = new int[n]; //assuming n is set beforehand
Run Code Online (Sandbox Code Playgroud)

或使用矢量:

std::vector<int> data;
Run Code Online (Sandbox Code Playgroud)

使用一个std::vector或者是否存在实际情况,手动分配动态内存是一个更好的想法,以提高效率,这绝对是一个更好的主意吗?

us2*_*012 13

使用std::vector/ 总是更好std::array,至少在您可以最终证明(通过分析)T* a = new T[100];解决方案在特定情况下快得多的情况下.这不太可能发生:vector/ array是一个普通旧阵列周围的极薄层.边界检查有一些开销vector::at,但你可以通过使用来规避operator[].

  • 使用C风格数组的通常原因与速度无关; 它用于静态初始化,并且用于编译器根据初始化器的数量确定大小.(当然,这绝不适用于动态分配的数组). (3认同)

Jam*_*nze 9

我无法想到动态分配C样式向量的任何情况都有意义.(我已经在C++工作了超过25年,我还没有使用new[].)通常情况下,如果我知道前面的大小,我将使用类似的东西:

std::vector<int> data( n );
Run Code Online (Sandbox Code Playgroud)

获得已经大小的矢量,而不是使用push_back.

当然,如果n非常小并且在编译时是已知的,我将使用std::array(如果我可以访问C++ 11),甚至是C样式数组,并且只是在堆栈上创建对象, 没有动态分配.(这种情况似乎在我工作的代码中很少见;小的固定大小的数组往往是类的成员.我偶尔会使用C风格的数组.)