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

news2024/11/15 19:59:33

目录

​编辑

引言

一、初识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++的魔力在你的指尖绽放!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python特征工程系列】一文教你使用PCA进行特征分析与降维(案例+源码)

这是我的第287篇原创文章。 一、引言 主成分分析&#xff08;Principal Component Analysis, PCA&#xff09;是一种常用的降维技术&#xff0c;它通过线性变换将原始特征转换为一组线性不相关的新特征&#xff0c;称为主成分&#xff0c;以便更好地表达数据的方差。 在特征重要…

Day23:Leetcode:530.二叉搜索树的最小绝对差 + 501.二叉搜索树中的众数 + 236. 二叉树的最近公共祖先

LeetCode&#xff1a;530.二叉搜索树的最小绝对差 问题描述 解决方案&#xff1a; 1.思路 中序遍历 2.代码实现 class Solution {int pre;int ans;public int getMinimumDifference(TreeNode root) {ans Integer.MAX_VALUE;pre -1;dfs(root);return ans;}public void d…

生成式AI导论2024-李宏毅

生成式AI导论2024-李宏毅 第0讲&#xff1a; 课程说明第1讲&#xff1a;生成式AI是什么第2講&#xff1a;今日的生成式人工智慧厲害在哪裡&#xff1f;從「工具」變為「工具人」 第0讲&#xff1a; 课程说明 生成式AI的入门课程 第1讲&#xff1a;生成式AI是什么 生成式人…

VMware创建虚拟机

1.自定义 2.选择硬件兼容性 3.创建一个空白硬盘 4.选择操作系统和版本 5.设置虚拟机名称以及安装位置 6.处理器配置 7.设置虚拟机内存 8.设置网络类型 8.选择IO控制器 9.选择磁盘类型 10.创建一个新硬盘 11.设置磁盘容量以及磁盘个数 12.设置磁盘文件名称(默认) 13.点击完成创建…

LabVIEW直方图应用解析

概述 在LabVIEW中&#xff0c;直方图是一种重要的工具&#xff0c;用于分析和展示数据的分布情况。它通过将数据分成若干区间并绘制对应频数&#xff0c;可以帮助用户了解数据的集中趋势、离散程度和分布形态。本文将详细介绍LabVIEW中直方图的使用方法、适用场合、实际意义及…

工业控制2D组态界面,丑是丑了点,但非常实用。

工业控制的2D组态界面是用于监控和控制工业过程的界面。它通常具有以下特征&#xff1a; 实时数据显示&#xff1a;2D组态界面能够实时显示传感器和设备的数据&#xff0c;如温度、压力、流量等。这些数据以图表、仪表盘、数字显示等形式呈现&#xff0c;使操作人员能够实时了解…

泰拉瑞亚从零开始的开服教程

前言 本教程将讲诉使用Linux系统搭建泰拉瑞亚服务器&#xff08;因为网上已经有很完善的windows开服教程了&#xff09;&#xff0c;使用的Linux发行版是Debian11,服务端使用的程序是TShock&#xff0c;游戏版本是1.4.4.9 所需要准备的 一台服务器&#xff08;本教程使用的是…

【Torch学习笔记】

作者&#xff1a;zjk 和 的区别是逐元素相乘&#xff0c;是矩阵相乘 cat stack 的区别 cat stack 是用于沿新维度将多个张量堆叠在一起的函数。它要求所有输入张量具有相同的形状&#xff0c;并在指定的新维度上进行堆叠。

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…

微信小程序基础 -- 小程序UI组件(5)

小程序UI组件 1.小程序UI组件概述 开发文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/view/component.html 什么是组件&#xff1a; 组件是视图层的基本组成单元。 组件自带一些功能与微信风格一致的样式。 一个组件通常包括 开始标签 和 结…

安全分析[1]之网络协议脆弱性分析

文章目录 威胁网络安全的主要因素计算机网络概述网络体系结构 网络体系结构脆弱性分组交换认证与可追踪性尽力而为匿名与隐私对全球网络基础实施的依赖无尺度网络互联网的级联特性中间盒子 典型网络协议脆弱性IP协议安全性分析IPSec&#xff08;IP Security)IPv6问题 ICMP协议安…

python基于深度学习的聊天机器人设计

python基于深度学习的聊天机器人设计 开发语言:Python 数据库&#xff1a;MySQL所用到的知识&#xff1a;Django框架工具&#xff1a;pycharm、Navicat、Maven 系统功能实现 登录注册功能 用户在没有登录自己的用户名之前只能浏览本网站的首页&#xff0c;想要使用其他功能都…

GitHub怎么修改个人资料名称name和用户名username

文档 GitHub•GitHub文档•Get started•帐户和个人资料•配置文件•自定义个人资料•个性化设置https://docs.github.com/zh/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/personalizing-your-profile GitHub•GitHub文档•G…

Scala的简单认识

Scala编程基础 小白的Scala学习笔记 2024/5/21 上午某一时刻 文章目录 Scala编程基础spark是用Scala开发出来的Scala的优点 打开idea 搜索scala&#xff0c;安装 如果不小心点了取消&#xff0c;或者没有上图的提示&#xff0c;就在依赖里面添加 spark是用Scala开发出来的 类比…

Linux环境下TensorFlow安装教程

TensorFlow是学习深度学习时常用的Python神经网络框 下面以Mask R-CNN 的环境配置为例&#xff1a; 首先进入官网&#xff1a;www.tensorflow.org TensorFlow安装的总界面&#xff1a; 新建anaconda虚拟环境&#xff1a; conda create -n envtf2 python3.8 &#xff08;Pyth…

K8S认证|CKA题库+答案| 15. 备份还原Etcd

目录 15、 备份还原Etcd CKA v1.29.0模拟系统 下载试用 题目&#xff1a; 开始操作: 1&#xff09;、切换集群 2&#xff09;、登录master并提权 3&#xff09;、备份Etcd现有数据 4&#xff09;、验证备份数据快照 5&#xff09;、查看节点和Pod状态 6&#xff0…

Cadence OrCAD学习笔记(3)capture使用技巧_1

本期介绍capture的一些使用技巧。资料来源于小破站up主硬小二 1、导出像Visio规格的图纸 2、全局修改元件属性 然后保存、关闭即可。 3、导出BOM 4、导出网表 5、元件自动编号 6、capture软件和allegro关联 7、新建原理图symbol 以上为添加封装库的路径 如果要创建多部分的sy…

反弹shell详细易懂讲解,看这一篇就够了

文章目录 反弹shell详细易懂讲解&#xff0c;看这一篇就够了一: 基础shell知识什么是shell&#xff0c;bash与shell的区别?通俗解释类型功能常见命令 二: 什么是反弹shell三: 反弹shell类型bash反弹shellNetcat 一句话反弹curl反弹shell正确姿势 wget方式反弹awk反弹 Shellsoc…

线性模型--普通最小二乘法

线性模型 一、模型介绍二、用于回归的线性模型2.1 线性回归&#xff08;普通最小二乘法&#xff09; 一、模型介绍 线性模型是在实践中广泛使用的一类模型&#xff0c;该模型利用输入特征的线性函数进行预测。 二、用于回归的线性模型 以下代码可以在一维wave数据集上学习参…

AWS CloudWatch日志组中关于中文关键字的查询

问题 在AWS CloudWatch日志组中&#xff0c;想要查询出包含中文关键字的错误日志&#xff0c;结果&#xff0c;AWS说语法错误。 最开始&#xff0c;使用如下查询&#xff0c;查询可能的错误日志&#xff1a; 查询语句&#xff0c;如下&#xff1a; {($.log %ERROR%) }具体效…