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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1141322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32驱动8位并口LCD显示屏操作指南

用STM32“硬刚”8位并口LCD&#xff1a;不靠库&#xff0c;不加芯片&#xff0c;照样点亮屏幕你有没有遇到过这种情况&#xff1f;项目做了一半&#xff0c;老板说&#xff1a;“得加个显示功能。”预算一看——零新增BOM成本。这时候&#xff0c;TFT屏太贵&#xff0c;OLED驱动…

C++ 基本语法

变量与数据类型C 支持多种数据类型&#xff0c;包括整数、浮点数、字符和布尔值。整数类型&#xff1a;int&#xff08;4字节&#xff09;、short&#xff08;2字节&#xff09;、long&#xff08;4或8字节&#xff09;、long long&#xff08;8字节&#xff09;。浮点类型&…

操作指南:hal_uartex_receivetoidle_dma配合中断处理异常数据帧

如何用 STM32 的HAL_UARTEx_ReceiveToIdle_DMA实现稳定高效的串口变长帧接收&#xff1f;你有没有遇到过这样的问题&#xff1a;设备通过串口发来的数据帧长度不固定&#xff0c;比如 Modbus RTU 报文、自定义协议包&#xff0c;甚至是一段不定长的传感器上传流&#xff1f;你试…

高频信号处理篇---包络检波电路

包络检波电路&#xff1a;一部三演员的“描边”戏剧让我用一个生动的比喻&#xff0c;带你理解包络检波电路的三个核心部分&#xff1a;&#x1f31f; 核心比喻&#xff1a;山顶看日出记录员想象你要记录日出时山顶的轮廓&#xff1a;云雾快速飘动 高频载波&#xff08;干扰&a…

图片格式转换右键菜单版 - IMGConverter

图片格式转换右键菜单版 - IMGConverter&#xff0c;化繁为简&#xff0c;摒弃传统的复杂转换格式方式IMGConverter&#xff1a;轻量全能的图片格式转换处理神器 ,轻松转换为bmp,gif,heif,ico,jpeg,jpg,png .webp【图片格式转换处理神器 】链接: https://pan.baidu.com/s/1JCcZ…

Multisim示波器带宽限制功能:项目应用实例

用Multisim示波器的带宽限制功能&#xff0c;提前“看到”真实世界的信号你有没有遇到过这样的情况&#xff1a;在仿真里看到开关电源的MOSFET节点上满屏振荡&#xff0c;吓得赶紧加RC吸收电路、改PCB布局&#xff1b;结果一到实验室&#xff0c;用产线那台20MHz带宽的老款示波…

右键图片直接转换图片格式,告别繁琐的格式转换(IMGConverter)

IMGConverter是一款图片格式转换工具&#xff0c;这类的工具其实很多&#xff0c;但是操作起来却比较繁琐。 通常情况下我们要“打开软件”—“上传图片”—“选择转换格式”—“转换”—“保存”&#xff0c;但是这款工具简化了这些不必要的程序。打开软件后&#xff0c;点“…

论文查重优化的现代方法:六款AI工具实现高效文本改写的操作步骤

排名 工具/方法 核心优势 适用场景 1 aibiye 智能降重学术语言优化 初稿完成后深度润色 2 aicheck 多维度查重选题辅助 全程论文质量监控 3 秒篇 一键生成逻辑结构优化 紧急补论文初稿 4 AskPaper 文献解析重点提炼 文献综述与理论支撑 5 知网人工降重 专…

大数据领域数据科学与人工智能的融合之道

大数据领域数据科学与人工智能的融合之道 一、引入与连接 引人入胜的开场 想象一下&#xff0c;在繁华都市的背后&#xff0c;每一辆出租车的行驶轨迹、每一家商店的销售记录、每一位居民的社交动态&#xff0c;这些看似杂乱无章的数据正汇聚成一股强大的力量。比如&#xff0c…

es安装一文说清:关键参数与目录结构解释

Elasticsearch 安装实战指南&#xff1a;从参数调优到目录规划&#xff0c;一文讲透你有没有经历过这样的场景&#xff1f;凌晨两点&#xff0c;日志系统突然告警&#xff0c;Elasticsearch 节点集体失联。登录服务器一看&#xff0c;discovery.seed_hosts配置错了 IP&#xff…

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

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

LCD显示屏驱动入门必看:手把手教你初始化配置

点亮第一块屏&#xff1a;从零搞懂LCD初始化配置 你有没有过这样的经历&#xff1f;买来一块崭新的TFT-LCD屏幕&#xff0c;接上STM32或ESP32&#xff0c;烧录代码后却发现—— 屏幕全黑、花屏、倒置&#xff0c;甚至毫无反应 &#xff1f; 别急&#xff0c;这几乎每个嵌入式…

通过AI技术提升论文原创性:六大智能工具改写文本的实用技巧解析

排名 工具/方法 核心优势 适用场景 1 aibiye 智能降重学术语言优化 初稿完成后深度润色 2 aicheck 多维度查重选题辅助 全程论文质量监控 3 秒篇 一键生成逻辑结构优化 紧急补论文初稿 4 AskPaper 文献解析重点提炼 文献综述与理论支撑 5 知网人工降重 专…

救命神器10个AI论文软件,研究生高效写作必备!

救命神器10个AI论文软件&#xff0c;研究生高效写作必备&#xff01; 论文写作的“救星”&#xff1a;AI 工具如何改变研究生的学术生活 在如今快节奏的学术环境中&#xff0c;研究生们常常面临论文写作的重重压力。从选题到开题&#xff0c;从初稿到修改&#xff0c;每一个环节…

【C/C++】Optional实现

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

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

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

亲测好用!8款AI论文工具测评:研究生开题报告全攻略

亲测好用&#xff01;8款AI论文工具测评&#xff1a;研究生开题报告全攻略 学术写作新选择&#xff1a;AI工具测评全解析 在当前科研环境日益激烈的背景下&#xff0c;研究生群体面临着论文撰写、开题报告准备等多重挑战。传统的写作方式不仅耗时费力&#xff0c;还容易因格式不…

利用AI技术降低论文重复率:六大工具改写文本的高效技巧与策略

排名 工具/方法 核心优势 适用场景 1 aibiye 智能降重学术语言优化 初稿完成后深度润色 2 aicheck 多维度查重选题辅助 全程论文质量监控 3 秒篇 一键生成逻辑结构优化 紧急补论文初稿 4 AskPaper 文献解析重点提炼 文献综述与理论支撑 5 知网人工降重 专…

PRD算法原理与应用

字数 633&#xff0c;阅读大约需 4 分钟PRD算法通常指游戏领域的 伪随机分布算法&#xff08;Pseudo-Random Distribution&#xff09;&#xff0c;核心是通过概率累加机制平衡随机事件的稳定性&#xff0c;常见于暴击、闪避等概率性游戏机制。算法核心原理PRD算法的核心是动态…

emwin双缓冲技术实现完整指南

emWin双缓冲技术实现完整指南从一个“撕裂的进度条”说起你有没有遇到过这样的场景&#xff1f;在调试一块工业触摸屏时&#xff0c;用户滑动一个调节条&#xff0c;界面上的数值明明在变化&#xff0c;但显示却像卡顿了一样&#xff0c;甚至出现上下错位的“断裂线”——就像画…