Ros*_*len 2 c++ constructor vector clear
如果我有一个std :: vector,我想完全覆盖(不只是调整大小).在内存管理方面,最安全的方法是什么?例如
int main() {
std::vector<float> X (5, 5.0);
X = std::vector<float> (6, 6.0);
X = std::vector<float> (4, 4.0);
}
Run Code Online (Sandbox Code Playgroud)
将创建一个值为5.0的5个浮点数的向量.然后它将使用值为6.0的大小为6的向量覆盖它,然后使用值为4.0的大小为4的向量进行覆盖.如果我无限次地执行此类操作,是否存在使用此方法破坏或泄漏内存的风险?我应该clear()在每次覆盖之前使用吗?有没有更有效的方法来实现这一目标?
我确信这个问题已被多次询问,但谷歌并没有提出我正在寻找的确切方案.
谢谢!
std::vector具有完成此功能的特定成员函数.分配器和复制/移动之外,每个vector的构造有相应的过载assign,做同样的事情.因此,如果您想重用该vector存储,只需使用它:
std::vector<float> X (5, 5.0);
X.assign(6, 6.0);
X.assign(4, 4.0);
Run Code Online (Sandbox Code Playgroud)
当然,有没有保证是vector实现不会重新分配内存.但是,这将是一个非常愚蠢的实现.