当前位置: 首页 > news >正文

C++ 学习笔记---容器---vector(后续会更新)

概念

可自动扩容的动态数组,不需要手动管理内存,可以根据元素数量自动扩容‘’

  • 连续内存存储
  • 随机访问速度快
  • STL 生态完整
  • 缓存友好

定义

定义空vector

vector<数据类型> 名;

定义空vector,并指定长度

vector<数据类型> 名(长度);

定义vector,并指定长度,且所有初识值都为0

vector<数据类型> 名(长度,值);

定义vector,并指定元素

vector<数据类型> 名={值1,值2};

访问元素

不越界检查访问元素 [ ]

名[下标];

越界检查访问元素 at

名.at(下标);

访问队首元素

名.front();

访问队尾元素

名.back();

得到最大值

*max_element(名.begin(), 名.end());

得到最小值

*min_element(名.begin(), 名.end());

获取大小

名.size(); 名.capacity();

区别:capacity 通常大于等于 size。capacity会提前申请更多空间,避免重复扩容

  • size:当前元素数量。
  • capacity:当前已分配的内存容量。

遍历

下标法

for (int i = 0; i < 名.size(); i++) { cout << 名[i] << " "; }

迭代器法

//正向迭代 for (auto it = 名.begin(); it != 名.end(); ++it) { cout << *it << " "; } //反向迭代 for (auto it = 名.rbegin(); it != 名.rend(); ++it) { cout << *it << " "; }

备注:

1.迭代器是编程中用于遍历集合元素的一种工具。它可以记住当前遍历的位置,并通过特定方法逐步访问集合中的元素。迭代器的核心特性是只能向前遍历,不能后退。

范围for循环

for(int element : 名){ cout<<element<<" "; }

添加元素 push_back()

队尾添加

名.push_back(元素);

指定位置添加

在下标n位置添加数值m

名.insert(名.begin()+n,m);

在下标m处添加n个数a

名.insert(名.begin()+m,n,a);

删除元素

队尾删除

名.pop_back()

删除下标n的元素

名.erase(名.begin()+n)
  • 名.begin() 表示从vector的最开头
  • n表示从开头往下移动几位

删除从下标从m到n-1的所有元素

名.erase(名.begin()+m,名.begin()+n);

遵循前包后不包原则

清空vector

名.clear()
特性数组vector
大小固定
自动扩容
连续内存
随机访问
STL支持较少完整
安全访问at()

题目练习

#include <bits/stdc++.h> using namespace std; int main(){ vector<int> v; int num; for(int i=0;i<9;i++){ cin>>num; v.push_back(num); } cout<<"遍历输出"<<endl; for(int e:v){ cout<<e<<" "; } cout<<endl; cout<<"删除队首,删除队尾,后输出"<<endl; v.erase(v.begin()); v.pop_back(); for(int e:v){ cout<<e<<" "; } cout<<endl; cout<<"删除下标2,后输出"<<endl; v.erase(v.begin()+2); for(int e:v){ cout<<e<<" "; } cout<<endl; cout<<"在下标5位置插入数字999,后输出"<<endl; v.insert(v.begin()+5,999); for(int e:v){ cout<<e<<" "; } cout<<endl; cout<<"删除下标2-4(包括4),后输出"<<endl; v.erase(v.begin()+2,v.begin()+5); for(int e:v){ cout<<e<<" "; } cout<<endl; cout<<"在下标1处添加2个888,后输出"<<endl; v.insert(v.begin()+1,2,888); for(int e:v){ cout<<e<<" "; } cout<<endl; cout<<"输出数组内的个数和空间 "<<endl; cout<<v.size()<<" "<<v.capacity(); return 0; }
http://www.gsyq.cn/news/1361634.html

相关文章:

  • 为什么92%的Lindy自动化项目在第90天遭遇断崖式停滞?资深架构师紧急披露3个临界预警信号
  • 第1篇:开篇|Claude Code 源码泄露始末与核心价值
  • Go语言依赖注入:构造函数注入
  • 【AI Agent行业落地黄金法则】:20年架构师亲授7大避坑指南与3个已验证千万级ROI场景
  • 收藏干货|2026 版 AI 大模型系统学习路线,小白程序员入门进阶指南
  • 清远搬工厂公司哪家好?口碑 TOP5 推荐 + 避坑指南 - 从来都是英雄出少年
  • Scrapy-Pinduoduo:高效构建拼多多电商数据采集系统
  • 10_函数递归_从阶乘到递归调用栈
  • 进程与线程:并发编程基础
  • 大数据+大模型=乘法效应?6个场景告诉你,大模型如何让你的数据平台“活”起来!
  • 计算机网络基础:TCP/IP 与 HTTP 核心知识
  • 缓存设计:从 LRU 到 Redis 实战
  • AI Agent自主操作软件实战手册(从PoC到生产环境全链路拆解)
  • 收藏!小白程序员必看:用8192维度理解大模型如何生成文字的循环奥秘
  • RAG已死?大模型主动“翻文件”实现精准检索,告别幻觉与低效!附GitHub源码!
  • 【2026最新全网最细】MySQL卸载、下载、安装、配置、使用全流程图文解析、和细节讲解(保姆级教学)
  • MySQL 进阶教程 第一章第二章
  • Go语言命名规范:清晰的命名
  • Go语言接口设计:最小接口原则
  • HTML 零基础入门:从概念到常用标签详解,前端入门超详细版
  • Manim完整指南:如何快速掌握数学动画引擎的终极教程
  • 工厂短视频培训哪个课程靠谱 - 资讯纵览
  • Air1601 LCD屏开发:规格+RGB接口+排线定义 干货汇总
  • BepInEx:如何为Unity和.NET游戏构建可扩展的模组生态系统
  • 文生图测试:没有一个大模型能表达出的幽默感
  • 【紧急预警】Apple Podcasts与Spotify已启动AI语音内容水印识别系统——3步完成合规声纹嵌入(含Python脚本+FFmpeg参数集)
  • 【Web安全】-企业资产信息收集(1):信息收集介绍,域名信息收集,主域名查询,ICP备案号查询,备案实体查询,工业和信息化部政务服务平台查询,怎样收集
  • 从翻车到封神:1个被低估的--no参数+2个隐藏材质关键词,让水面倒影清晰度突破人眼分辨极限
  • AI Agent在金融运维中如何实现99.99%故障自愈?——基于3家头部银行落地数据的深度复盘
  • 从东方修心到 AI 工程:我用 Spring AI 重构了一套七境智能体操作系统