news 2026/6/10 16:08:37

C++ vector 容器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++ vector 容器

C++ vector 容器概述

std::vector是 C++ 标准模板库(STL)中的动态数组容器,支持随机访问、动态扩容和高效的元素操作。其底层通过连续内存空间实现,兼具数组的高效性和动态扩展的灵活性。


基本用法

初始化
#include <vector> std::vector<int> vec1; // 空向量 std::vector<int> vec2(5, 10); // 5个元素,初始值为10 std::vector<int> vec3 = {1, 2, 3}; // 列表初始化
常用操作
vec1.push_back(4); // 尾部插入元素 vec1.pop_back(); // 删除尾部元素 vec1.size(); // 返回元素数量 vec1.empty(); // 判断是否为空 vec1[0]; // 随机访问(不检查边界) vec1.at(0); // 带边界检查的访问 vec1.clear(); // 清空所有元素

动态扩容机制

  • vector在插入元素时若容量不足,会自动分配更大的内存(通常为当前容量的 2 倍或 1.5 倍),并将旧元素拷贝到新内存。
  • 可通过reserve()预分配空间以避免频繁扩容:
    vec1.reserve(100); // 预分配100个元素的空间

迭代器与遍历

// 范围for循环(C++11) for (int x : vec1) { std::cout << x << " "; } // 迭代器遍历 for (auto it = vec1.begin(); it != vec1.end(); ++it) { std::cout << *it << " "; }

性能与复杂度

  • 随机访问:O(1)
  • 尾部插入/删除:均摊 O(1)
  • 中间插入/删除:O(n)(需移动后续元素)

与其他容器对比

特性vectorlistdeque
内存布局连续非连续分段连续
随机访问O(1)O(n)O(1)
中间插入/删除O(n)O(1)O(n)

实际应用示例

元素去重
std::sort(vec1.begin(), vec1.end()); vec1.erase(std::unique(vec1.begin(), vec1.end()), vec1.end());
二维动态数组
std::vector<std::vector<int>> matrix(3, std::vector<int>(4)); // 3x4矩阵

注意事项

  • 避免在循环中频繁调用push_back(),优先使用reserve()预分配空间。
  • 插入/删除操作可能导致迭代器失效,需谨慎处理。
  • 需要头文件<vector>和命名空间std
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/31 7:15:55

应用——智能配电箱监控系统

智能配电箱监控系统开发笔记一、项目概述这是一个基于多线程邮箱通信机制的智能配电箱监控系统&#xff0c;实现了以下功能&#xff1a;多线程通信&#xff1a;使用自定义邮箱系统进行线程间通信数据库存储&#xff1a;使用SQLite实时存储传感器数据报警功能&#xff1a;实时监…

作者头像 李华
网站建设 2026/6/7 7:23:18

大数据架构 _ 如何设计一个支持数据版本控制的系统?

大数据架构 | 如何设计一个支持数据版本控制的系统&#xff1f; 一、引言&#xff1a;你可能经历过的「数据失控」时刻 凌晨三点&#xff0c;分析师小周的钉钉突然炸了——运营同学发现今天的「用户复购率」报表比昨天暴跌30%&#xff0c;要求立刻排查问题。小周连忙打开数据仓…

作者头像 李华
网站建设 2026/6/9 10:46:45

迁移微软容器镜像注册表地址

迁移微软容器镜像注册表地址&#xff1a;从 mcr.microsoft.com 迁移到 mcr.azure.cnIntro最近在本地构建 docker 镜像的时候发现速度非常慢&#xff0c;在想是不是前段时间 dotnet CDN 切换有关&#xff0c;于是去微软容器注册表网站上看了一眼发现&#xff0c;针对中国用户推出…

作者头像 李华
网站建设 2026/6/5 13:38:47

【C/C++】Optional实现

Optional 实现详解 概述 Optional<T> 是一个可能包含值也可能为空的容器&#xff0c;用于显式表达"值可能不存在"的语义。它解决了传统方案的缺陷&#xff1a;用 -1 表示无效 ID、用 nullptr 表示无效指针、用空字符串表示无值——这些都需要额外约定且容易出错…

作者头像 李华
网站建设 2026/6/7 6:43:34

STM32调试接口配置对JLink下载的影响研究

STM32调试接口配置对JLink下载的影响研究&#xff1a;从“无法连接”到稳定烧录的深度解析你有没有遇到过这样的场景&#xff1f;硬件刚上电&#xff0c;信心满满地打开IDE点击“Download”&#xff0c;结果弹出一串红色报错&#xff1a;“Target not responding”、“Connecti…

作者头像 李华
网站建设 2026/6/10 15:15:32

从GDPR到CCPA:全球数据合规法规在大数据中的应用

从GDPR到CCPA:全球数据合规法规在大数据中的应用 关键词:GDPR、CCPA、数据合规、隐私保护、大数据应用、用户权利、数据控制者 摘要:本文以全球最具影响力的两大数据隐私法规——欧盟《通用数据保护条例》(GDPR)与美国《加州消费者隐私法案》(CCPA)为核心,通过生活案例…

作者头像 李华