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样式向量的任何情况都有意义.(我已经在C++工作了超过25年,我还没有使用new[].)通常情况下,如果我知道前面的大小,我将使用类似的东西:
std::vector<int> data( n );
Run Code Online (Sandbox Code Playgroud)
获得已经大小的矢量,而不是使用push_back.
当然,如果n非常小并且在编译时是已知的,我将使用std::array(如果我可以访问C++ 11),甚至是C样式数组,并且只是在堆栈上创建对象,
没有动态分配.(这种情况似乎在我工作的代码中很少见;小的固定大小的数组往往是类的成员.我偶尔会使用C风格的数组.)