理解差异:std::vector::resize() 与 std::vector::reserve()
主题std::vector::reserve() 与 std::vector::resize() 的比较引发了编程社区内的讨论。本文旨在阐明它们在向量操作中的不同作用。
std::vector::reserve()
std::vector::reserve() 分配内存指定数量的元素,但不调整向量本身的大小。该向量保持其原始逻辑大小。当您预计向向量添加元素并希望通过预分配内存来优化性能时,此方法很有用。
std::vector::resize()
std: :vector::resize() 将向量的大小修改为指定的元素数量。如果向量需要扩展,它将分配额外的内存。与 Reserve() 不同,resize() 将所有新元素初始化为其默认值。
示例用法
考虑问题中提供的代码:
void MyClass::my_method() { my_member.reserve(n_dim); for (int k = 0; k < n_dim; k++) my_member[k] = k; }
根据回复,这里使用reserve()是不正确的。要正确地将元素写入向量,应该使用 resize():
void MyClass::my_method() { my_member.resize(n_dim); for (int k = 0; k < n_dim; k++) my_member[k] = k; }
Visual Studio 2010 SP1 行为
提到的代码的“崩溃”行为Visual Studio 2010 SP1 中的行为与响应中描述的正确行为一致。在调整向量大小之前尝试访问超出向量逻辑大小的元素(在本例中为 my_member[5])会导致未定义的行为。
保留和失效
需要注意的是,使用reserve()然后通过push_back()添加元素可能会使引用、迭代器或指向数据的指针无效。矢量。这是因为 Reserve() 分配内存时没有调整大小,当添加新元素时,它们可能会被放置在不同的位置。
综上所述,std::vector::reserve() 和 std::vector ::resize() 有不同的目的。 Reserve() 预分配内存,而 resize() 修改向量的大小并初始化新元素。了解它们的差异对于有效的向量操作至关重要。
以上是std::vector::reserve() 与 std::vector::resize():我什么时候应该使用哪个?的详细内容。更多信息请关注PHP中文网其他相关文章!