当前位置: 首页 > 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.cnnetsun.cn/news/2535015.html

相关文章:

  • CANN-ops-nn-昇腾NPU神经网络算子的积木盒子
  • 从翻车到封神:1个被低估的--no参数+2个隐藏材质关键词,让水面倒影清晰度突破人眼分辨极限
  • 如何用开源工具实现自动化硬件适配?OpCore-Simplify让跨平台部署变得简单
  • gcc下载地址
  • Keil C166嵌入式开发中的宽字符实现与优化
  • 飞行人形机器人空气动力学建模与CFD仿真实践
  • 抖音内容批量下载实战指南:从单视频到用户主页的高效方案
  • 企业内如何通过Taotoken实现API访问控制与审计
  • PostgreSQL 性能优化:从 3 秒到 30 毫秒,我做了这 5 件事
  • 文件上传漏洞深度解析:从getshell到六维纵深防御
  • IDA与Frida协同逆向:静态定位+动态Hook实战指南
  • Unity风格化山脉管线:轮廓生成+分层材质+程序植被
  • ThingsVis v1.1.15 版本更新:补齐嵌入与运维体验短板,多场景集成更可靠
  • 鸿蒙签名验证报错UNABLE_TO_VERIFY_LEAF_SIGNATURE根因解析
  • PE-bear:专注PE文件结构解析的静态分析利器
  • DeepSeek垂直搜索性能崩塌预警信号:当QPS>127且P99延迟突增>413ms时,必须立即执行的5项熔断操作(含Prometheus监控告警Rule模板)
  • KNN算法如何赋能GIS空间邻近性分析
  • 西班牙法院驳回西甲对 NordVPN 罚款请求,屏蔽令案件仍在审理
  • GPT-4混合专家架构真相:稀疏激活与动态路由原理
  • 学术演示文稿制作困境与LaTeX模板解决方案
  • JMeter分布式压测的Kerberos与OAuth双认证实战指南
  • 前端各类问题
  • 132、运动控制中的通信协议:EtherCAT详解
  • ReACT智能体:推理与行动解耦的AI工作流范式
  • 咨询项目交付周期缩短40%的关键不在算法,而在Agent工作流设计:3个被90%团队忽略的协同断点
  • 多智能体自学习系统:在部分可观测对抗环境中的端到端进化
  • 鸿蒙物流追踪页面构建:运单追踪与快捷入口模块详解
  • Deep Agent工程框架:解耦计划-执行-记忆-协作的智能体架构
  • Lovable不是UI美化!揭秘神经科学验证的4层用户依恋模型与落地SDK架构
  • 2026年阿里云OpenClaw/Hermes Agent配置Token Plan怎么部署看这