【std::vector】clear介绍

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

      • [`std::vector::clear()` 详细说明](#std::vector::clear() 详细说明)
        • [1. 核心功能](#1. 核心功能)
        • [2. 对 size 和 capacity 的具体影响](#2. 对 size 和 capacity 的具体影响)
        • [3. 代码示例](#3. 代码示例)
        • [4. 补充说明](#4. 补充说明)
      • 总结

你想了解C++标准库中std::vectorclear()成员函数的功能,并且重点关注这个函数是对size生效,还是对capacity生效。

std::vector::clear() 详细说明

1. 核心功能

clear()的作用是销毁vector中所有的元素 ,并将vector元素数量(size)置为 0 ,但不会释放 vector 已经分配的内存空间(即不改变容量 capacity)。

2. 对 size 和 capacity 的具体影响
  • 对 size 的影响clear() 会直接将 vectorsize() 返回值变为 0,因为容器内的所有元素都被销毁了,当前有效元素的数量为 0。
  • 对 capacity 的影响clear() 完全不影响 capacity() 的返回值,容器之前分配的内存空间会被保留,不会被释放。
3. 代码示例

下面的代码可以直观展示 clear()sizecapacity 的影响:

cpp 复制代码
#include <iostream>
#include <vector>

int main() {
    // 创建一个vector并添加元素
    std::vector<int> vec = {1, 2, 3, 4, 5};
    
    std::cout << "调用clear()前:" << std::endl;
    std::cout << "size: " << vec.size() << std::endl;     // 输出 5(当前元素数量)
    std::cout << "capacity: " << vec.capacity() << std::endl; // 输出 5(分配的内存能容纳的元素数)

    // 调用clear()清空元素
    vec.clear();

    std::cout << "\n调用clear()后:" << std::endl;
    std::cout << "size: " << vec.size() << std::endl;     // 输出 0(元素已清空)
    std::cout << "capacity: " << vec.capacity() << std::endl; // 输出 5(内存仍保留)

    // 补充:如果想同时清空元素并释放内存(改变capacity),可以用swap技巧
    std::vector<int>().swap(vec); // 用空vector交换,释放原有内存
    std::cout << "\nswap后:" << std::endl;
    std::cout << "size: " << vec.size() << std::endl;     // 输出 0
    std::cout << "capacity: " << vec.capacity() << std::endl; // 输出 0(内存已释放)

    return 0;
}
4. 补充说明
  • clear() 只是销毁元素,不会调用 deallocate 释放内存,这样做的目的是为了性能优化:如果后续需要向 vector 中添加新元素,不需要重新分配内存,直接复用原有空间即可。
  • 如果你既想清空元素,又想释放内存(让 capacity 也变为 0),可以使用示例中的 swap 技巧,或者在 C++11 及以上版本中使用 shrink_to_fit()(注意:shrink_to_fit() 是请求式的,编译器不一定会严格执行,但主流编译器都会支持)。

总结

  1. std::vector::clear() 仅对 size 生效,会将 size 置为 0,销毁所有元素;
  2. clear()capacity 无影响,不会释放已分配的内存空间;
  3. 若需清空元素并释放内存,可使用 swapvectorshrink_to_fit()(C++11+)。
相关推荐
郭涤生23 分钟前
C++模板元编程理论基础简介
c++
CheerWWW37 分钟前
C++学习笔记——栈内存与堆内存、宏、auto、std::array
c++·笔记·学习
WBluuue1 小时前
数据结构与算法:二项式定理和二项式反演
c++·算法
yashuk1 小时前
C语言 vs. C++ ,哪个更适合初学者?
c语言·c++·面向对象编程·初学者·学习路径
-许平安-1 小时前
MCP项目笔记十(客户端 MCPClient)
c++·笔记·ai·raii·mcp·pluginapi·plugin system
一只旭宝1 小时前
【C++ 入门精讲2】函数重载、默认参数、函数指针、volatile | 手写笔记(附完整代码)
c++·笔记
旖-旎1 小时前
哈希表(存在重复元素||)(4)
数据结构·c++·算法·leetcode·哈希算法·散列表
John.Lewis2 小时前
C++进阶(8)智能指针
开发语言·c++·笔记
無限進步D2 小时前
蓝桥杯赛前刷题
c++·算法·蓝桥杯·竞赛
小贾要学习2 小时前
【Linux】应用层自定义协议与序列化
linux·服务器·c++·json