C++容器大小管理 resize和reserve区别(容器.区别.大小.管理.resize...)

wufei123 发布于 2025-09-02 阅读(4)
resize改变容器元素数量,可能填充或删除元素;reserve仅预分配内存,不改变元素个数,用于提升性能。

c++容器大小管理 resize和reserve区别

在C++中,resize 和 reserve 是两个常用于管理容器(特别是

std::vector
)大小的函数,它们作用不同,容易混淆。理解它们的区别对性能和内存管理至关重要。 resize:改变容器中元素的数量

resize 会改变容器的逻辑大小,也就是容器中实际元素的个数。

  • 调用
    resize(n)
    后,容器中将恰好有
    n
    个元素。
  • 如果
    n
    大于当前大小,容器会在末尾添加新元素,使用默认构造函数或指定值填充。
  • 如果
    n
    小于当前大小,多余的元素会被删除(析构函数会被调用)。
  • 可能触发内存重新分配,但这不是它的主要目的。

示例:

vector v = {1, 2, 3};
v.resize(5); // v 变为 {1, 2, 3, 0, 0},新增两个0
v.resize(2); // v 变为 {1, 2},最后两个被移除 reserve:预分配内存空间

reserve 用于改变容器的容量(capacity),即预先分配足够多的内存空间,避免频繁的重新分配。

  • 调用
    reserve(n)
    后,容器的容量至少为
    n
    ,但元素个数(size)不变。
  • 不会构造或析构任何元素,只是确保有足够内存。
  • 主要用于提升性能,减少
    push_back
    时的内存分配次数。
  • 如果当前容量已 >= n,调用
    reserve(n)
    通常无操作。

示例:

vector v;
v.reserve(100); // 容量变为至少100,size仍为0
cout cout =100 关键区别总结
  • resize 改变
    size()
    ,影响元素个数,可能填充或删除元素。
  • reserve 改变
    capacity()
    ,只分配内存,不改变元素个数。
  • 频繁
    push_back
    前使用
    reserve
    可避免多次内存重分配。
  • 需要初始化或截断元素时用
    resize

基本上就这些。用错可能导致性能下降或逻辑错误,比如用

reserve
后直接访问未构造的元素会引发未定义行为。

以上就是C++容器大小管理 resize和reserve区别的详细内容,更多请关注知识资源分享宝库其它相关文章!

标签:  容器 区别 大小 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。