C++之vector的Capacity函数size、max_size、resize、capacity、empty、reserve、shrink_to_fit总结(二百零二)

本文详细介绍了C++标准库vector类中的容量管理函数,包括size(),max_size(),resize(),capacity(),empty(),reserve(),shrink_to_fit()的用法及应用实例,帮助开发者理解和优化内存管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:理解C++之vector关于容量成员函数size、max_size、resize、capacity、empty、reserve、shrink_to_fit用法。

    1. size():
    • 作用:返回容器中元素的数量。
    • 用法:使用size()函数可以获取容器中元素的数量。
    1. max_size():
    • 作用:返回容器能够容纳的最大元素数量。
    • 用法:使用max_size()函数可以获取容器能够容纳的最大元素数量。注意,这个数量实际上取决于操作系统和编译器的限制。
    1. resize():
    • 作用:改变容器的大小,可以增加或减少元素数量。
    • 用法:resize()函数有两种用法。一种是通过指定新的大小来增加或减少容器的元素数量,另一种是通过指定新的大小和默认值来增加容器的元素数量并初始化新增的元素。
    1. capacity():
    • 作用:返回容器当前能够容纳的元素数量。
    • 用法:使用capacity()函数可以获取容器当前能够容纳的元素数量。注意,capacity()函数返回的是容器分配内存的大小,而不是元素的实际数量。
    1. empty():
    • 作用:判断容器是否为空。
    • 用法:使用empty()函数可以判断容器是否为空。如果容器为空,则返回true,否则返回false
    1. reserve():
    • 作用:改变容器的容量,即预留一定的内存空间。
    • 用法:使用reserve()函数可以改变容器的容量,以便在插入大量元素之前预留足够的内存空间,避免多次重新分配内存。
    1. shrink_to_fit():
    • 作用:收缩容器的容量,使其与元素数量相匹配。
    • 用法:使用shrink_to_fit()函数可以收缩容器的容量,使其与元素数量相匹配。该函数会释放多余的内存空间。

2.应用实例

1. size(): 返回容器中元素的数量。

示例:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers {1, 2, 3, 4, 5};
    std::cout << "容器的大小:" << numbers.size() << std::endl;
    return 0;
}

2. max_size(): 返回容器能够容纳的最大元素数量。

示例:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers;
    std::cout << "容器可以容纳的最大元素数量:" << numbers.max_size() << std::endl;
    return 0;
}

3. resize(): 改变容器的大小,可以增加或减少元素数量。

示例:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers {1, 2, 3};
    numbers.resize(5); // 增加容器的大小到5
    std::cout << "容器的大小:" << numbers.size() << std::endl;
    
    numbers.resize(2); // 减少容器的大小到2
    std::cout << "容器的大小:" << numbers.size() << std::endl;
    return 0;
}

4. capacity(): 返回容器当前能够容纳的元素数量。

示例:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers;
    std::cout << "容器当前的容量:" << numbers.capacity() << std::endl;
    return 0;
}

5. empty(): 判断容器是否为空,返回一个布尔值。

示例:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers;
    if (numbers.empty()) {
        std::cout << "容器为空" << std::endl;
    } else {
        std::cout << "容器不为空" << std::endl;
    }
    return 0;
}

6. reserve(): 改变容器的容量,即预留一定的内存空间。

示例:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers;
    numbers.reserve(10);
    std::cout << "容器的容量:" << numbers.capacity() << std::endl;
    return 0;
}

7. shrink_to_fit(): 收缩容器的容量,使其与元素数量相匹配。

示例:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers {1, 2, 3, 4, 5};
    numbers.pop_back(); // 移除最后一个元素
    numbers.shrink_to_fit(); // 收缩容器的容量
    std::cout << "容器的容量:" << numbers.capacity() << std::endl;
    return 0;
}
C++中的string类提供了shrink_to_fit()函数,可以使string的容量(capacity)随着size的缩小而缩小。\[2\]当我们使用resize()函数来改变string的大小,如果size缩小后,字符超出的部分会被裁剪掉,但是capacity不会减小。而shrink_to_fit()函数可以在size缩小后,将capacity也相应地缩小,以节省内存空间。\[2\]这个函数C++11中被引入,可以通过调用string对象的shrink_to_fit()方法来使用。 #### 引用[.reference_title] - *1* [C++ string清空并释放内存空间的两种方法(shrink_to_fit()、swap())](https://blog.csdn.net/qq_41687938/article/details/117731243)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [c++ string的详细用法(15)reserve()resize()shrink_to_fit()](https://blog.csdn.net/qq_40630246/article/details/103655230)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【C++】如何释放vector的内存空间及std::vector::shrink_to_fit用法简介](https://blog.csdn.net/weixin_43753894/article/details/126970068)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android系统攻城狮

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值