C++ - 覆盖/重建整个std :: vector的最佳实践

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()在每次覆盖之前使用吗?有没有更有效的方法来实现这一目标?

我确信这个问题已被多次询问,但谷歌并没有提出我正在寻找的确切方案.

谢谢!

Nic*_*las 5

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实现不会重新分配内存.但是,这将是一个非常愚蠢的实现.