news 2026/4/29 20:11:29

STL核心:vector动态数组完全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STL核心:vector动态数组完全指南

一、STL 整体介绍

STL 是 C++ 标准模板库,三大核心组件:

  1. 容器:存放数据(vector、string、list、map 等)
  2. 算法:排序、查找、遍历、交换
  3. 迭代器:容器通用访问指针

STL 优势:

  • 无需手动造轮子,全部封装成熟接口
  • 动态扩容、内存自动管理
  • 代码简洁、开发效率极高
  • 刷题、项目开发必备

二、vector 容器核心概念

vector 是动态数组,完全替代原生普通数组:

  • 原生数组:长度固定,容易越界
  • vector:运行时自动扩容,长度可变,安全高效
  • 连续内存存储,支持下标随机访问

头文件必须引入:

#include <vector> using namespace std;

三、vector 四种常用初始化方式

// 1. 空容器 vector<int> v1; // 2. 指定大小,默认初始化为0 vector<int> v2(5); // 3. 指定大小+初始值 vector<int> v3(5, 10); // 4. 直接初始化列表 vector<int> v4 = {1,2,3,4,5};

四、vector 增删改查 核心 API

1. 增加元素

vector<int> v; v.push_back(10); // 尾部插入(最常用) v.push_back(20);

2. 修改元素

支持下标直接修改,和数组用法一致

v[0] = 100;

3. 查询元素

// 下标访问 cout << v[0]; // 获取首尾元素 cout << v.front(); cout << v.back();

4. 删除元素

v.pop_back(); // 删除尾部元素 v.clear(); // 清空所有元素

5. 容量与大小

v.size(); // 当前元素个数 v.empty(); // 判断是否为空 v.resize(8); // 重新指定容器大小

五、vector 三种遍历方式(全掌握)

方式 1:下标遍历(最简单,新手首选)

vector<int> v = {1,2,3,4,5}; for(int i = 0; i < v.size(); i++) { cout << v[i] << " "; }

方式 2:迭代器遍历(STL 通用写法)

迭代器是所有容器的通用访问方式,理解为容器专用指针

for(vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; }

方式 3:范围 for 遍历(C++11 极简写法)

for(int val : v) { cout << val << " "; }

六、vector 嵌套(二维动态数组)

日常刷题、矩阵场景高频使用,替代二维数组

// 二维vector vector<vector<int>> arr; // 插入一行数据 arr.push_back({1,2,3}); arr.push_back({4,5,6}); // 双层循环遍历 for(int i = 0; i < arr.size(); i++) { for(int j = 0; j < arr[i].size(); j++) { cout << arr[i][j] << " "; } cout << endl; }

七、完整综合实战案例

需求:录入数据、遍历、删除、清空、判空

#include <iostream> #include <vector> using namespace std; int main() { vector<int> v; // 尾部添加元素 v.push_back(15); v.push_back(25); v.push_back(35); // 下标修改 v[1] = 99; // 范围for遍历 cout << "容器元素:"; for(int num : v) { cout << num << " "; } cout << endl; // 首尾元素 cout << "首元素:" << v.front() << endl; cout << "尾元素:" << v.back() << endl; // 删除尾部 v.pop_back(); cout << "删除后大小:" << v.size() << endl; // 清空 v.clear(); if(v.empty()) { cout << "容器已清空" << endl; } return 0; }

八、vector VS 原生数组 硬核对比

表格

特性普通数组vector 容器
长度固定不可变动态自动扩容
内存栈区 / 全局区堆区自动管理
越界风险极易越界崩溃安全性更高
常用操作无内置方法自带增删清空接口
适用场景固定少量数据项目、刷题、批量数据

结论:实际开发与算法刷题,优先使用 vector


九、新手高频易错点

  1. 忘记引入头文件#include <vector>
  2. 使用下标访问不存在的位置,造成越界
  3. 混淆size()元素个数与内存容量
  4. 清空数据误用pop_back循环删除,直接用clear()
  5. 二维 vector 嵌套书写格式错误
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 20:08:24

OBS多平台直播终极指南:obs-multi-rtmp插件一键同步推流教程

OBS多平台直播终极指南&#xff1a;obs-multi-rtmp插件一键同步推流教程 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 想要同时在多个平台直播却苦于繁琐的配置&#xff1f;obs-multi…

作者头像 李华
网站建设 2026/4/29 19:57:58

发轮胎损伤自动检测系统、智能维护平台以及质量控制系统 深度学习框架目标检测算法如何使用深度学习YOLOV8模型训练道路汽车轮胎缺陷损伤分割检测数据集 检测识别轮胎鼓包扎钉 切割痕迹

发轮胎损伤自动检测系统、智能维护平台以及质量控制系统 深度学习框架目标检测算法如何使用深度学习YOLOV8模型训练道路汽车轮胎缺陷损伤分割检测数据集 检测识别轮胎鼓包扎钉 切割痕迹 文章目录汽车轮胎损伤分割与检测数据集数据集概述类别标签及标注数量统计表数据集特点总结…

作者头像 李华
网站建设 2026/4/29 19:57:01

告别双系统!在统信UOS上用VirtualBox虚拟机搞定银行U盾、老旧网银插件

统信UOS下VirtualBox虚拟机的金融级应用实战&#xff1a;无缝兼容银行U盾与老旧网银 当国产操作系统逐渐成为政企办公标配&#xff0c;统信UOS用户常面临一个现实困境&#xff1a;那些仅支持Windows的银行U盾、税务插件和专有网银客户端如何正常运行&#xff1f;我曾为某事业单…

作者头像 李华
网站建设 2026/4/29 19:54:35

AI赋能需求工程:从PRD到可执行任务的自动化实践

1. 项目概述&#xff1a;从“产品需求文档”到“可执行技能”在软件开发和产品管理的日常工作中&#xff0c;我们常常面临一个经典的困境&#xff1a;产品经理&#xff08;PM&#xff09;精心撰写的产品需求文档&#xff08;PRD&#xff09;&#xff0c;到了工程师&#xff08;…

作者头像 李华
网站建设 2026/4/29 19:53:07

题解:AtCoder AT_awc0006_e Store Sales Management

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来&#xff0c;并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构&#xff0c;旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…

作者头像 李华