news 2026/5/5 3:10:28

C++动态数组vector全面解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++动态数组vector全面解析

一、上期回顾

掌握了 C++ STLstring字符串类的构造、赋值、遍历、常用接口、与 C 字符数组互转。今天开始学习STL 最常用动态数组:vector

二、vector 是什么

vector动态数组

  • 底层还是连续内存,和普通数组一样支持随机访问
  • 自动扩容,不用手动关心大小
  • 封装了增删改查全套接口,比原生数组安全好用

三、vector 相比于普通数组优势

  1. 普通数组:固定长度,容易越界、栈溢出
  2. vector:动态自动扩容,空间灵活
  3. 支持直接赋值、拷贝、整体初始化
  4. 自带大小、容量、清空、插入删除接口
  5. 可以作为函数返回值,不用手动管理内存

四、vector 常用构造方式

#include <iostream> #include <vector> using namespace std; int main() { // 1. 空容器 vector<int> v1; // 2. n个初始化为0 vector<int> v2(5); // 3. n个相同值 vector<int> v3(5, 10); // 4. 拷贝构造 vector<int> v4(v3); // 5. 数组区间构造 int arr[] = {1,2,3,4}; vector<int> v5(arr, arr+4); return 0; }

五、vector 常用赋值方式

vector<int> v1 = {1,2,3}; vector<int> v2; // 1. 直接赋值 v2 = v1; // 2. assign 赋值 v2.assign(3, 66); // 3. 区间赋值 v2.assign(v1.begin(), v1.end());

六、vector 遍历三种方式

vector<int> v = {10,20,30,40}; // 1. 下标遍历 for(int i = 0; i < v.size(); i++) { cout << v[i] << " "; } // 2. 迭代器遍历 for(vector<int>::iterator it = v.begin(); it != v.end(); ++it) { cout << *it << " "; } // 3. C++11 范围for for(auto val : v) { cout << val << " "; }

七、vector 核心接口必背

vector<int> v; // 尾部插入 v.push_back(10); // 尾部删除 v.pop_back(); // 获取元素个数 v.size(); // 获取容量 v.capacity(); // 判断是否为空 v.empty(); // 清空元素 v.clear(); // 指定位置插入 v.insert(v.begin(), 99); // 指定位置删除 v.erase(v.begin()); // 预留空间,减少扩容 v.reserve(100); // 重置大小 v.resize(10);

八、size 与 capacity 区别(面试常问)

  • size:当前实际元素个数
  • capacity:已经分配的内存容量
  • size == capacity再插入元素,vector自动扩容

九、vector 扩容机制原理

  1. vector 底层连续内存,满了不能原地扩展
  2. 重新开辟一块更大内存
  3. 把旧元素拷贝到新空间
  4. 释放旧内存
  5. 指向新空间

一般扩容规则:

  • 2 倍 或 1.5 倍 扩容(不同编译器略有差异)
  • 提前用reserve()预留空间,可避免多次扩容,提升效率

十、完整综合示例代码

#include <iostream> #include <vector> using namespace std; int main() { vector<int> v; // 尾插元素 v.push_back(1); v.push_back(2); v.push_back(3); cout << "元素遍历:"; for(auto val : v) { cout << val << " "; } cout << endl; cout << "size:" << v.size() << endl; cout << "capacity:" << v.capacity() << endl; // 头部插入 v.insert(v.begin(), 99); cout << "插入后第一个元素:" << v[0] << endl; // 清空 v.clear(); cout << "清空后size:" << v.size() << endl; return 0; }

十一、今日核心总结

  1. vector 是动态连续数组,替代原生数组首选
  2. size 实际元素数,capacity 已分配容量
  3. 三种遍历:下标、迭代器、范围 for
  4. 常用操作:push_back、pop_back、insert、erase、clear
  5. 提前 reserve 预留空间,减少自动扩容开销

十二、课后练习

  1. 创建 vector 存入 1~10,遍历打印
  2. 在第 2 个位置插入数值 66
  3. 删除最后一个元素,观察 size 变化
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 3:05:28

SecureCode:AI代码生成中的安全审查与漏洞预防

1. 项目背景与核心价值SecureCode这个项目瞄准了当前AI代码生成领域的一个关键痛点——如何确保大模型生成的代码在功能正确的同时具备足够的安全性。随着GitHub Copilot、Amazon CodeWhisperer等AI编程助手的普及&#xff0c;开发者们发现这些工具虽然能快速生成代码片段&…

作者头像 李华
网站建设 2026/5/5 3:04:26

江苏电子式动态平衡电动调节阀推荐

在江苏的工业生产、建筑暖通等众多领域&#xff0c;电子式动态平衡电动调节阀的应用极为广泛。它对于保障系统的稳定运行、实现节能降耗起着关键作用。今天&#xff0c;就为大家推荐一家在这方面表现出色的企业——天津水阀机械有限公司。一、企业实力有目共睹天津水阀机械有限…

作者头像 李华
网站建设 2026/5/5 3:00:27

Coze低代码模式和Vibe Coding的区别

版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl Coze的版本 Coze(扣子)是字节跳动推出的一站式AI智能体开发平台,历经两年发展,已从单纯的智能体搭建工具演进为完整的AI应用开发生态。 Coze国内版与海外版最核心的区别在于,它们是两套完…

作者头像 李华
网站建设 2026/5/5 2:57:35

3D场景理解与开放词汇检测技术解析

1. 项目概述&#xff1a;当3D场景理解遇上开放词汇在自动驾驶和机器人领域&#xff0c;让机器像人类一样理解三维环境一直是个核心挑战。去年我在参与一个仓储机器人项目时&#xff0c;就深刻体会到了传统3D检测方法的局限性——当遇到训练数据中未出现的新物体时&#xff0c;系…

作者头像 李华
网站建设 2026/5/5 2:55:24

保姆级教程:非华为笔记本也能用上华为多屏协同,手把手搞定NFC卡贴和SN码修复(Win10实测)

非华为笔记本实现华为多屏协同的完整实战指南 在移动办公和跨设备协作成为主流的今天&#xff0c;华为的多屏协同功能因其流畅的跨设备体验备受关注。但这项功能原本仅限华为自家设备使用&#xff0c;让许多非华为笔记本用户望而却步。本文将彻底打破这一限制&#xff0c;通过详…

作者头像 李华