深入探索C++ Vector容器:灵活的动态数组秘籍

目录

​编辑

引言

一、初识vector:构造与初始化

二、动态管理:添加与删除元素

三、访问与遍历:多种方式直达元素

四、容量与大小:动态调整的艺术

五、进阶技巧:高效运用vector

结语


引言

      在C++编程的世界里,std::vector容器犹如一名全能选手,以其独特的魅力在众多容器中脱颖而出。作为STL(标准模板库)的明星成员,vector不仅继承了数组的高效随机访问特性,还融合了动态内存管理的灵活性,成为处理可变大小序列数据的首选工具。本文将带领大家深入探索vector的奥秘,通过丰富的代码示例,揭示其强大功能背后的设计哲学。

一、初识vector:构造与初始化

  vector容器的核心优势在于其能够根据需要自动调整大小,同时保持元素的连续存储,从而实现高效访问。

代码示例1:基础构造

#include <iostream>
#include <vector>

int main() {
    std::vector<int> nums; // 默认构造,创建空vector
    std::vector<char> chars(5, 'A'); // 填充构造,创建含有5个'A'的vector
    std::vector<double> fromArray({3.14, 2.71}); // 初始化列表构造
    return 0;
}
二、动态管理:添加与删除元素
  • push_back():在vector末尾添加元素。
  • insert():在指定位置插入元素,可能导致迭代器失效。
  • pop_back():删除vector末尾的元素。
  • erase():删除指定位置的元素或一段区间。

代码示例2:元素操作

std::vector<int> numbers = {1, 2, 3};
numbers.push_back(4); // 添加元素到末尾
numbers.insert(numbers.begin() + 1, 5); // 在指定位置插入
numbers.pop_back(); // 删除最后一个元素
numbers.erase(numbers.begin() + 2); // 删除特定位置元素
三、访问与遍历:多种方式直达元素
  • 下标访问v[i],快速直接。
  • at():提供边界检查的安全访问。
  • 迭代器:支持STL算法,实现遍历。

代码示例3:访问与遍历

for(int i = 0; i < numbers.size(); ++i) {
    std::cout << numbers[i] << " ";
}
// 或使用迭代器
for(auto it = numbers.begin(); it != numbers.end(); ++it) {
    std::cout << *it << " ";
}
四、容量与大小:动态调整的艺术
  • size():返回当前元素数量。
  • capacity():返回当前分配的内存容量。
  • resize():调整vector大小,可选填充值初始化新元素。
  • reserve():预分配内存,避免频繁重分配。

代码示例4:容量管理

numbers.resize(10, -1); // 调整大小至10,新增元素初始化为-1
numbers.reserve(20); // 预留至少20个元素的内存空间
五、进阶技巧:高效运用vector
  • 数据迁移与交换swap()函数高效地交换两个vector的内容。
  • 内存释放:动态分配的内存会在vector析构时自动释放。
  • 异常安全:理解在插入和删除操作中迭代器的失效规则,编写健壮代码。

代码示例5:高级操作

std::vector<int> anotherVec = {10, 20};
numbers.swap(anotherVec); // 交换两个vector
结语

   std::vector不仅是C++编程中的瑞士军刀,更是现代软件开发中不可或缺的工具。通过本文的介绍与实践,希望能帮助你更深入地理解vector的强大之处,灵活运用其特性,提升代码的效率与优雅。无论是处理大数据集、构建高效算法,还是日常开发任务,掌握vector的精髓都将使你的编程之旅更加顺畅。继续探索,让C++的魔力在你的指尖绽放!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/646744.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++:STL

STL 文章目录 STLSTL 绪论迭代器&#xff08;iterators&#xff09;容器&#xff08;Containers&#xff09;vectorset,multisetmap,multimapstackqueuedequepriority_queuebitset 算法&#xff08;Algorithms&#xff09;sort,count,find,lower_bound,upper_bound,binary_sear…

Java整合ELK实现日志收集 之 Elasticsearch、Logstash、Kibana

简介 Logstash&#xff1a;用于收集并处理日志&#xff0c;将日志信息存储到Elasticsearch里面 Elasticsearch&#xff1a;用于存储收集到的日志信息 Kibana&#xff1a;通过Web端的可视化界面来查看日志&#xff08;数据可视化&#xff09; Logstash 是免费且开放的服务器端数…

如何查看热门GPT应用?

1、登陆chatgpt 2、访问 https://chatgpt.com/gpts 3、在该界面&#xff0c;可以搜索并使用image generator, Write For Me&#xff0c;Language Teature等热门应用。

架构师系列-定时任务解决方案

定时任务概述 在很多应用中我们都是需要执行一些定时任务的&#xff0c;比如定时发送短信&#xff0c;定时统计数据&#xff0c;在实际使用中我们使用什么定时任务框架来实现我们的业务&#xff0c;定时任务使用中会遇到哪些坑&#xff0c;如何最大化的提高定时任务的性能。 我…

可以通过哪些方式邀请媒体报道宣传?

在我个人的职业生涯中,曾经历过一段为了公司新产品的推广,而独自踏上了寻找媒体曝光机会的征途。这段经历至今仍历历在目,它不仅是一段挑战自我的过程,也是我深刻理解到传统媒体联系方式局限性的重要转折点。 起初,我满怀激情地决定通过直接联系媒体来获取免费的宣传机会。我天…

JRT1.7发布

JRT1.7连仪器在线演示视频 JRT1.5实现质控主体、1.6基本完成质控&#xff1b;本次版本推进到1.7&#xff0c;1.7集菜单权限、登录、打印导出客户端、初始化、质控、Linux客户端、仪器连接和监控体系各种功能大全&#xff0c;上十年写系统用到的都全了。 这次直接挑战检验最难…

【fastapi+mongodb】使用motor操作mongodb

上一篇文章&#xff0c;我们在电脑上安装了mongodb数据库。这篇文章&#xff0c;我们在fastapi后端使用motor操作mongodb 如果你还没看过上一篇文章&#xff0c;链接在这里&#xff1a;【MongoDB】安装与使用 安装 motor motor 是一个用于操作 mongodb 数据库的 python 库&a…

Web开发学习总结

学习路线 Web 全球广域网&#xff0c;也称为万维网(www World Wide Web)&#xff0c;能够通过浏览器访问的网站 初识Web前端 Web标准也称为网页标准&#xff0c;由一系列的标准组成&#xff0c;大部分由W3C(World Wide Web Consortium&#xff0c;万维网联盟)负责制定。三个组…

for循环里如果std::pair的类型写不对,可能会造成性能损失

第一版 std::map<int, int> t;t.emplace(1, 1);for (const std::pair<int,int>& data : t){int i 0;std::ignore i;}中间留一些空格&#xff0c;是因为ms在调试的时候&#xff0c;尤其是模板比较多的时候&#xff0c;经常断点的行号有问题。比如第5行的断点&…

1960-2022年世界银行WDI面板数据(1400+指标)

1960-2022年世界银行WDI面板数据&#xff08;1400指标&#xff09; 1、时间&#xff1a;1960-2022年 2、来源&#xff1a;世界银行WDI 指标&#xff1a;包括健康、公共部门、农业与农村发展、城市发展、基础设施、外债、性别、援助效率、教育、气候变化、环境、社会保护与劳…

大模型应用:基于Golang实现GPT模型API调用

1.背景 当前OpenAI提供了开放接口&#xff0c;支持通过api的方式调用LLM进行文本推理、图片生成等能力&#xff0c;但目前官方只提供了Python SDK。为了后续更方便集成和应用&#xff0c;可以采用Golang对核心推理调用接口进行封装&#xff0c;提供模型调用能力。 2.相关准备…

Django框架过时了吗?新手学Flask还是Django?

文章目录 Django框架的优势与劣势优势劣势 Flask框架的优势与劣势优势劣势 如何选择&#xff1f; 近年来&#xff0c;随着Flask框架的崛起&#xff0c;一些人开始质疑Django框架是否已经过时。在选择学习框架时&#xff0c;新手们往往感到困惑&#xff0c;不知道是学习Flask还是…

2024宝藏工具EasyRecovery数据恢复软件免费版本下载

在这个数字化的时代&#xff0c;数据已经成为我们生活中的重中之重。无论是工作中的重要文件&#xff0c;还是手机中珍贵的照片&#xff0c;我们都依赖着这些数据。然而&#xff0c;数据丢失的情况时有发生&#xff0c;可能是误删&#xff0c;可能是设备故障&#xff0c;更可能…

移动端特效

一&#xff0c;触屏事件 1.触屏touch事件 2.触摸事件对象 如果侦听的是一个DOM元素&#xff0c;他俩是一样的 如果手指离开了&#xff0c;不能侦听到前两者&#xff0c;能侦听到第三个 我们一般都是触摸元素&#xff0c;所以一般都是第二个比较常用 第一个&#xff1a;屏幕…

Java核心:注解处理器

Java提供了一个javac -processor命令支持处理标注有特定注解的类&#xff0c;来生成新的源文件&#xff0c;并对新生成的源文件重复执行。执行的命令大概是这样的: javac -XprintRounds -processor com.keyniu.anno.processor.ToStringProcessor com.keyniu.anno.processor.Po…

java “错误:编码GBK 的不可映射字符”

环境&#xff1a;JDK-17 本机编码&#xff1a;utf-8 代码编码&#xff1a;GBK 错误&#xff1a;java “错误&#xff1a;编码GBK 的不可映射字符” 解决1&#xff1a;记事本打开java源文件&#xff0c;另存为选择ANSI编码 解决2&#xff1a;复制代码再将编码格式改为utf-8,…

CentOS 7安装alertmanager

说明&#xff1a;本文介绍如何在CentOS 7安装alertmanager&#xff1b; Step1&#xff1a;下载安装包 访问Github仓库&#xff0c;下载对应版本的alertmanager安装包 https://github.com/prometheus/alertmanager/releases 如何查看自己系统的信息&#xff0c;可参考下图中的…

2024.5组队学习——MetaGPT(0.8.1)智能体理论与实战(中):订阅智能体OSS实现

传送门&#xff1a; 《2024.5组队学习——MetaGPT&#xff08;0.8.1&#xff09;智能体理论与实战&#xff08;上&#xff09;&#xff1a;MetaGPT安装、单智能体开发》《2024.5组队学习——MetaGPT&#xff08;0.8.1&#xff09;智能体理论与实战&#xff08;下&#xff09;&…

入门五(项目介绍及登录需求)

软件缺陷判定标准 项目中缺陷的管理流程 使用Excel对于缺陷进行管理 使用工具管理缺陷 一、项目背景 传智作为一个IT教育机构&#xff0c;拥有自己开发且实际运营的产品&#xff1b; 将开发和运营的技术作为授课的内容&#xff0c;对于学员而言学到的都是一手的真实案例和…

Redis数据类型(上篇)

前提&#xff1a;&#xff08;key代表键&#xff09; Redis常用的命令 命令作用keys *查看当前库所有的keyexists key判断某个key是否存在type key查看key是什么类型del key 删除指定的keyunlink key非阻塞删除&#xff0c;仅仅将keys从keyspace元数据中删除&#xff0c;真正的…