作为函数参数,我得到一个vector<double>& vec
长度和值未知的(输出向量,因此是非常量)。我想将此向量初始化为全零的特定长度 n。
这将起作用
vec.clear();
vec.resize( n, 0.0 );
这也将起作用:
vec.resize( n );
vec.assign( n, 0.0 );
第二个效率更高(因为不涉及内存释放/分配)?有没有更有效的方法来做到这一点?
作为函数参数,我得到一个vector<double>& vec
长度和值未知的(输出向量,因此是非常量)。我想将此向量初始化为全零的特定长度 n。
这将起作用
vec.clear();
vec.resize( n, 0.0 );
这也将起作用:
vec.resize( n );
vec.assign( n, 0.0 );
第二个效率更高(因为不涉及内存释放/分配)?有没有更有效的方法来做到这一点?
std::vector<double>(n).swap(vec);
在此之后,保证 vec 的大小和容量为 n,所有值均为 0.0。
也许自 C++11 以来更惯用的方式是
vec.assign(n, 0.);
vec.shrink_to_fit();
第二行可选。vec
在从多个元素开始的情况下n
,是否调用shrink_to_fit
是保持比所需更多的内存与执行重新分配之间的权衡。
std::vector<double>(n).swap(vec);
这也具有实际压缩向量的优点。(在您的第一个示例中,clear()
不保证压缩您的向量。)
好吧,让我们完善一下方法:)
vec.swap(std::vector<double>(n));
std::vector<double>(n).swap(vec);
std::swap(vector<double>(n), vec);
std::swap(vec, vector<double>(n));
您发布的代码片段都没有进行任何内存释放,因此它们大致相等。
其他人不断发布的交换技巧将需要更长的时间来执行,因为它会释放向量最初使用的内存。这可能是可取的,也可能不是可取的。