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

【C++修仙录02】筑基篇:vector 使用

嗨~大家好这里是春栀怡铃声的博客~“做你害怕的事然后发现不过如此~”目录创建vector遍历方法迭代器reserve 扩容resize 对size 进行改变 会加值会减值insertsizecapacityemptypush_backeraseswapclear创建vectorvectorintv2(10, 2); vectorint v1; vectorintv3(v2.begin(), --v2.end()); //迭代器创建遍历方法范围for由2部分组成冒号前面是范围内用于迭代的变量第二变量则表示被迭代的范围自动读取数据自动结束vectorintv3(10,2); for (auto e : v3) { cout e ; } cout endl;下标访问//下标访问 for (size_t i 0; i v3.size(); i) { cout v3[i] ; } cout endl;迭代器vector 的迭代器可以理解成“指向元素的通用指针”用来遍历和操作容器里的元素。常用接口vectorint v (10,2);auto it v.begin(); // 指向第一个元素auto ed v.end(); // 指向最后一个元素的后一个位置遍历for (auto it v.begin(); it ! v.end(); it) {cout *it ;}常见特性- *it 取值- it 前进- it n、it - n因为 vector 的迭代器是随机访问迭代器- it1 it2可比较位置先后- it[n]等价于 *(it n)只读迭代器vectorint::const_iterator cit v.cbegin();const_iterator 不能修改元素。反向迭代器for (auto it v.rbegin(); it ! v.rend(); it) { std::cout *it ; }迭代器遍历//迭代器遍历 vectorint::iterator it v3.begin(); //auto itv3.begin(); while (it ! v3.end()) { cout *it ; it; } cout endl;reserve 扩容提前开好空间像下面的示例创建了string 类 的tmp 想让tmp 拥有和s1一样大的空间存放数据使用reserve 开出空间a. reserve(n) ncapacity在vector 中明确不会缩容在string (gcc) 会缩容,string(vs.2022) 不会缩容vectorintv(10, 2); v.reserve(5); cout v.size() endl; cout v.capacity() endl; v.reserve(20); cout v.size() endl; cout v.capacity() endl;初始有效数据有10个空间大小也为10第一次reserve(5) 510 ,无需扩容并且不会缩小空间大小 空间大小和有效数据都不变第二次reserve(20) 需要扩容空间大小变为20有效数据不变resize 对size 进行改变 会加值会减值vectorintv(10, 2); v.resize(5); cout v.size() endl; cout v.capacity() endl; v.resize(15,6); cout v.size() endl; cout v.capacity() endl; v.resize(20, 3); cout v.size() endl; cout v.capacity() endl;初始位置有效数据有10个空间大小为10经过第一次resize(5) 有效数据缩减到5空间大小不变第二次resize(15,6) 有效数据加到15空间也扩大到15新增的有效数据都是6第三次 resize(20,3) 有效数据加到20空间扩容到22 新增的有效数据都是3insertinsert 只能传迭代器第一个参数代表指向位置插入第二个参数代表插入的值void text_vector5() { vectorintv(10, 2); v.insert(v.begin(), 4); v.insert(v.begin() 3, 6); //可以通过迭代器加来进行随机位置插入 for (auto e : v) { cout e ; } cout endl; }size返回的是v1的有效数据个数使用v1.size();capacity返回的是v1的空间大小v1.capacity();empty返回v1是否为空的判断值是空返回true ,不是空返回falsepush_back使用push_back 在v1末尾插入vectorintv1; v1.push_back(5);eraseerase 只能传迭代器一种用法是直接删除传入迭代器指向的位置的值另一种是删除第一个迭代器到第二个迭代器的范围中的值vectorintv1(10,2); v1.erase(v1.begin()); for (auto e : v1) { cout e ; } cout endl; v1.erase(--v1.end()); for (auto e : v1) { cout e ; } cout endl;swap• vector 的 swap 用来交换两个 vector 的内容时间复杂度通常是 O(1)。用法#include iostream #include vector using namespace std; int main() { vectorint a {1, 2, 3}; vectorint b {4, 5}; a.swap(b); for (int x : a) cout x ; // 4 5 cout endl; for (int x : b) cout x ; // 1 2 3 cout endl; }交换后- a 变成原来 b 的内容- b 变成原来 a 的内容包括- 元素内容- size()- capacity()clear只删除v1中的数据v1的空间大小不变
http://www.gsyq.cn/news/1378987.html

相关文章:

  • VMnet8 的8到底是什么意思?
  • 融合教育影子教师证交钱前怎么判断机构是否正规 - 最新教育培训热点
  • 1、从 Harness 到 Hermes:当 AI 学会为自己套上缰绳,自改进智能体时代已来
  • 抖音批量下载工具:如何高效自动化获取用户主页全作品
  • 三方物流平台-toB客户全生命周期详解
  • 10分钟快速上手:Nintendo Switch游戏备份终极指南
  • Java 第五章第六章 案例教程
  • 龙岩6月雨季来临,房屋漏水怎么办?卫生间免砸砖防水、外墙、屋面+地下室渗漏。权威防水公司靠谱TOP5推荐(2026年6月本地最新深度调研) - 企业资讯
  • 在好靶场的WEB海洋遨游
  • 终极指南:5步精通开源网页版三国杀无名杀
  • Whisper-WebUI:一站式语音转字幕解决方案在Mac上的完美部署指南
  • 亳州6月雨季来临,房屋漏水怎么办?卫生间免砸砖防水、外墙、屋面+地下室渗漏。权威防水公司靠谱TOP5推荐(2026年6月本地最新深度调研) - 企业资讯
  • 从零到一:163MusicLyrics跨平台歌词提取工具的完整使用指南
  • 实战指南:Happy Island Designer 的深度应用与优化
  • Safe Exam Browser 虚拟化检测绕过技术深度实践
  • 《Java 100 天进阶之路》第32篇:Java常用工具类(Objects、Collections、Arrays深入)
  • Python渗透测试开源项目源码精读指南:从状态机到零拷贝解析
  • 手机HTTPS抓包失败的根源与系统化排障指南
  • C++特有的bool变量使用
  • 在C++中测量代码执行时间的两种方法
  • 江苏启东寄快递省钱指南|全网高性价比寄件渠道盘点,日常寄件少花冤枉钱 - 时讯资讯
  • Android Compose 图层的合成 : BlendMode
  • Android Compose 离屏缓冲 : CompositingStrategy.Offscreen
  • 027、内存带宽瓶颈:如何设计NPU避免“内存墙”?
  • 星盘接口开发文档:推进盘接口指南
  • GESP6级C++考试语法知识(二十八、广度优先搜索(三、层级 BFS))
  • 告别杂乱GitHub和文档:手把手教你用WRITE-BUG数字空间管理小组编程项目
  • 网络运维与网络安全 阶段一 基础篇二十
  • BME280传感器扩展板设计:兼容I2C/SPI接口与可配置电源方案详解
  • 互联网大厂Java面试:从Java SE到Spring Boot的全面探讨