and*_*ykx 6 c++ stl initialization
作为函数参数,我得到一个vector<double>& vec具有未知长度和值的输出向量,因此是非常量的.我想将此向量初始化为具有全零的特定长度n.
这会奏效
vec.clear();
vec.resize( n, 0.0 );
Run Code Online (Sandbox Code Playgroud)
这也可行:
vec.resize( n );
vec.assign( n, 0.0 );
Run Code Online (Sandbox Code Playgroud)
第二个更有效(因为没有涉及内存释放/分配)?有没有更有效的方法来做到这一点?
Jam*_*kin 10
std::vector<double>(n).swap(vec);
Run Code Online (Sandbox Code Playgroud)
在此之后,vec保证具有大小和容量n,所有值均为0.0.
也许是自C++ 11以来更惯用的方式
vec.assign(n, 0.);
vec.shrink_to_fit();
Run Code Online (Sandbox Code Playgroud)
第二行可选.在vec以多于n元素开始的情况下,是否调用shrink_to_fit是在保持比执行重新分配所需的更多内存之间的权衡.
std::vector<double>(n).swap(vec);
Run Code Online (Sandbox Code Playgroud)
这具有实际压缩矢量的优点.(在你的第一个例子中,clear()不保证压缩你的矢量.)
| 归档时间: |
|
| 查看次数: |
2573 次 |
| 最近记录: |