c++ - (重新)将 vector 初始化为具有初始值的特定长度

标签 c++ stl initialization

作为函数参数,我得到一个 vector<double>& vec (一个输出 vector ,因此是非常量)具有未知的长度和值。我想将此 vector 初始化为全为零的特定长度 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 个元素开始的情况下,是否调用 shr​​ink_to_fit 是在保留比现在更多的内存之间的权衡需要与执行重新分配。

关于c++ - (重新)将 vector 初始化为具有初始值的特定长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/173995/

相关文章:

C++ 错误 : no match for call to ‘(std::string {aka std::basic_string<char>}) (std::string&)’

c++ - 为多个版本的 RedHat 构建应用程序

c++ - 为什么这段代码会失败? child 不等

C++20 概念 : Which template specialization gets chosen when the template argument qualifies for multiple concepts?

c++ - 为什么 std::string_view 没有 assign() 和 clear() 方法?

iPhone 的 C++ 编译(STL 问题?)

c++ - MyApp.exe 中出现未处理的 win32 异常

C++ STL streambuf异常处理

c - 初始化结构指针

c++ - 在 C++ 中是否可以在初始化时覆盖虚拟方法?