vector的reserve和capacity的区别?

vector 的 reserve 和 capacity 是 C++ 中与内存管理相关的概念,但它们的含义和用途不同:

1. capacity(容量)

  • 定义:当前 vector 已分配的内存空间能够容纳的元素总数(即无需重新分配内存时,最多能存储的元素数量)。
  • 特点
    • capacity 是自动管理的。当 size()(当前元素数量)超过 capacity 时,vector 会自动重新分配更大的内存(通常是双倍增长)。
    • capacity 永远不会小于 size(),因为 vector 必须确保所有元素都有存储空间。
    • capacity 的值可以通过 vector::capacity() 获取。

2. reserve(预留空间)

  • 定义:一个成员函数,用于手动请求 vector 至少分配指定大小的内存空间
  • 特点
    • reserve(n) 会确保 capacity() >= n,但不会改变 size()(即不会添加或删除元素)。
    • 如果请求的 n 小于当前 capacityreserve 不会有任何操作(容量不会缩小)。
    • reserve 的典型用途是预分配内存以避免多次自动扩容(例如已知需要存储大量元素时,提前 reserve 可提升性能)。

核心区别

特性capacityreserve
作用表示当前分配的内存空间大小手动请求至少分配指定大小的内存
是否自动调整是(自动扩容)否(需显式调用)
影响 size()不影响(size 由元素数量决定)不影响(仅改变容量,不改变元素)
缩小容量可能(通过 shrink_to_fit()不支持(reserve 不减少容量)

示例代码

#include <vector>
#include <iostream>

int main() {
    std::vector<int> vec;
    std::cout << "Initial capacity: " << vec.capacity() << std::endl; // 0

    vec.reserve(10);
    std::cout << "After reserve(10): capacity=" << vec.capacity() 
              << ", size=" << vec.size() << std::endl; // capacity=10, size=0

    vec.push_back(1);
    std::cout << "After push_back(1): capacity=" << vec.capacity() 
              << ", size=" << vec.size() << std::endl; // capacity=10, size=1

    vec.reserve(5); // 无操作(容量不会缩小)
    std::cout << "After reserve(5): capacity=" << vec.capacity() << std::endl; // 10
}

总结

  • capacity 是当前内存分配的状态,由 vector 自动管理。
  • reserve 是优化手段,用于预分配内存,避免频繁扩容带来的性能损耗。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值