(重新)使用初始值将矢量初始化为特定长度

时间:2008-10-06 11:52:02

标签: c++ stl initialization

作为一个函数参数,我得到一个vector<double>& vec(一个输出向量,因此是非const),其长度和值都是未知的。我希望将此向量初始化为具有全零的特定长度n。

这将有效

vec.clear();
vec.resize( n, 0.0 );

这也可行:

vec.resize( n );
vec.assign( n, 0.0 );

第二个是否更有效(因为不涉及内存释放/分配)?有没有更有效的方法来做到这一点?

4 个答案:

答案 0 :(得分:10)

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是在保持比执行重新分配所需的更多内存之间的权衡。 / p>

答案 1 :(得分:9)

std::vector<double>(n).swap(vec);

这具有实际压缩矢量的优点。 (在您的第一个示例中,clear()无法保证压缩矢量。)

答案 2 :(得分:3)

好吧,让我们详细说明如何做到这一点:)

vec.swap(std::vector<double>(n));
std::vector<double>(n).swap(vec);
std::swap(vector<double>(n), vec);
std::swap(vec, vector<double>(n));

答案 3 :(得分:2)

您发布的代码片段都没有进行任何内存释放,因此它们大致相等。

其他人不断发布的交换技巧将需要更长时间才能执行,因为它将释放向量最初使用的内存。这可能是也可能不是。