【C++】STL——vector的使用、 vector增删查改函数的介绍和使用、push_back和pop_back、operator[]

文章目录

  • 1.vector的使用
  • 2.vector的增删查改
    • (1)push_back 尾插
    • (2)pop_back 尾删
    • (3)find 查找
    • (4)insert 在position之前插入val
    • (5)erase 删除指定位置的数据
    • (6)swap 交换两个vector的数据空间
    • (7)operator[ ] 像数组一样访问

1.vector的使用

  vector完整介绍

  vector和含义、vector构造函数、vector迭代器

  vector有关空间函数的使用

2.vector的增删查改

在这里插入图片描述

(1)push_back 尾插

  push_back()函数用于向容器的末尾添加一个元素。 它接受一个参数,即要添加的元素的值(或对象)。当向 vector 容器中添加元素时,其大小会动态增长,以容纳新添加的元素。

  下面是push_back()函数的定义和用法示例:

  我们创建了一个空的std::vector容器 numbers。然后使用push_back()函数向容器中添加元素。我们连续添加了三个元素,分别是 10、20 和 30。

  最后,我们打印出容器的大小和元素,可以看到容器的大小为 3,并且容器中的元素分别为 10、20 和 30。

  通过使用push_back()函数,我们可以轻松地向std::vector容器中添加元素,无需手动调整容器的大小。这使得在需要动态添加元素的情况下,使用vector变得更加方便和灵活。

#include <iostream>
#include <vector>int main() {std::vector<int> numbers; // 创建一个空的int类型的vector容器numbers.push_back(10); // 添加元素 10numbers.push_back(20); // 添加元素 20numbers.push_back(30); // 添加元素 30std::cout << "容器的大小为:" << numbers.size() << std::endl;std::cout << "容器的元素为:";for (const auto& number : numbers) {std::cout << number << " ";}std::cout << std::endl;return 0;
}//容器的大小为:3
//容器的元素为:10 20 30

(2)pop_back 尾删

  pop_back()函数用于移除容器中的最后一个元素。它不接受任何参数。 调用pop_back()函数将使容器的大小减小1。

  下面是pop_back()函数的定义和使用示例:

  我们首先创建一个包含5个元素的std::vector容器 numbers。然后打印出容器的初始大小和元素。接下来,我们调用 pop_back() 函数来删除容器中的最后一个元素。

  在这种情况下,最后一个元素 50 被从容器中移除。最后,我们再次打印容器的大小和元素,可以看到容器的大小减小了1,元素变为 10 20 30 40。

  使用pop_back()函数,我们可以方便地从std::vector容器中删除最后一个元素,而无需手动调整容器的大小。这对于需要按照特定顺序添加和删除元素的情况非常有用。

#include <iostream>
#include <vector>int main() {std::vector<int> numbers = {10, 20, 30, 40, 50}; // 创建一个包含5个元素的int类型的vector容器std::cout << "初始容器的大小为:" << numbers.size() << std::endl;std::cout << "初始容器的元素为:";for (const auto& number : numbers) {std::cout << number << " ";}std::cout << std::endl;numbers.pop_back(); // 移除最后一个元素std::cout << "调用pop_back()后的容器的大小为:" << numbers.size() << std::endl;std::cout << "调用pop_back()后的容器的元素为:";for (const auto& number : numbers) {std::cout << number << " ";}std::cout << std::endl;return 0;
}//初始容器的大小为:5
//初始容器的元素为:10 20 30 40 50 
//调用pop_back()后的容器的大小为:4
//调用pop_back()后的容器的元素为:10 20 30 40 

(3)find 查找

  find()函数用于在容器中搜索给定的值,并返回指向第一个匹配元素的迭代器。如果找不到匹配的元素,则返回指向容器末尾的迭代器 end()。

  下面是find()函数的定义和使用示例:

  使用 find() 函数,我们可以方便地在 std::vector 容器中查找指定的值,并获得该元素在容器中的位置。这对于搜索和定位特定元素很有用。请注意,在使用 find() 函数之前,需要包含头文件 < algorithm >。

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> numbers = {10, 20, 30, 40, 50}; // 创建一个包含5个元素的int类型的vector容器// 在容器中查找值为 30 的元素auto it = std::find(numbers.begin(), numbers.end(), 30);if (it != numbers.end()) {std::cout << "找到值为 30 的元素在容器中的位置:" << std::distance(numbers.begin(), it) << std::endl;}else {std::cout << "未找到值为 30 的元素" << std::endl;}return 0;
}//找到值为 30 的元素在容器中的位置:2

(4)insert 在position之前插入val

  insert()函数用于在指定位置之前插入一个或多个元素。它接受两个参数,第一个是要插入的位置的迭代器,第二个是要插入的元素或范围。

  其中,pos是指定插入位置的迭代器,val 是要插入的元素的值。

  使用insert()函数,我们可以向std::vector容器中指定的位置插入一个或多个元素,从而在容器中实现元素的插入操作。这对于在特定位置插入新元素或在容器中间插入一段连续的元素非常有用。

  下面是insert()函数的定义和使用示例:

  1.在指定位置插入一个元素:

#include <iostream>
#include <vector>int main() {std::vector<int> numbers = {10, 20, 30, 40, 50}; // 创建一个包含5个元素的int类型的vector容器// 在位置 index=2 插入一个元素 15auto it = numbers.insert(numbers.begin() + 2, 15);std::cout << "容器的元素为:";for (const auto& number : numbers) {std::cout << number << " ";}std::cout << std::endl;return 0;
}//容器的元素为:10 20 15 30 40 50

  2.在指定位置插入多个元素:

#include <iostream>
#include <vector>int main() {std::vector<int> numbers = {10, 20, 30, 40, 50}; // 创建一个包含5个元素的int类型的vector容器// 在位置 index=2 插入三个元素: 15, 25, 35numbers.insert(numbers.begin() + 2, {15, 25, 35});std::cout << "容器的元素为:";for (const auto& number : numbers) {std::cout << number << " ";}std::cout << std::endl;return 0;
}//容器的元素为:10 20 15 25 35 30 40 50

(5)erase 删除指定位置的数据

  erase()函数用于从容器中删除一个或一段元素。 它接受一个或两个参数,第一个参数是要删除的位置或范围的迭代器。

  使用erase()函数,我们可以从std::vector容器中删除一个或一段指定位置的元素,实现对容器中元素的删除操作。这对于删除特定位置的元素或删除一段连续的元素非常有用。

  以下是erase()函数的定义和使用示例:

  1.删除指定位置的一个元素:

#include <iostream>
#include <vector>int main() {std::vector<int> numbers = {10, 20, 30, 40, 50}; // 创建一个包含5个元素的int类型的vector容器// 删除位置为 index=2 的元素auto it = numbers.erase(numbers.begin() + 2);std::cout << "容器的元素为:";for (const auto& number : numbers) {std::cout << number << " ";}std::cout << std::endl;return 0;
}//容器的元素为:10 20 40 50

  2.删除指定范围的一段元素:

#include <iostream>
#include <vector>int main() {std::vector<int> numbers = {10, 20, 30, 40, 50}; // 创建一个包含5个元素的int类型的vector容器// 删除从 index=1 到 index=3 的元素numbers.erase(numbers.begin() + 1, numbers.begin() + 4);std::cout << "容器的元素为:";for (const auto& number : numbers) {std::cout << number << " ";}std::cout << std::endl;return 0;
}//容器的元素为:10 50

(6)swap 交换两个vector的数据空间

  swap()函数用于交换两个对象的值。 它接受两个参数,即要交换值的对象。

  swap() 函数可用于交换任意类型的对象值,包括基本数据类型、自定义类型和STL容器等。它是一个非常方便的函数,可以快速交换对象的值,避免了手动进行临时变量的赋值操作。

  以下是swap()函数的定义和使用示例:

#include <iostream>int main() {int a = 10;int b = 20;std::cout << "交换前,a = " << a << ", b = " << b << std::endl;std::swap(a, b);std::cout << "交换后,a = " << a << ", b = " << b << std::endl;return 0;
}//交换前,a = 10, b = 20
//交换后,a = 20, b = 10

(7)operator[ ] 像数组一样访问

  operator[]是一个重载运算符,用于通过索引访问容器、数组、字符串等类似的可索引的数据结构的元素。 它使我们可以像使用数组一样使用容器。

  通过使用 operator[] 运算符,我们可以根据索引访问容器中的元素,就像使用数组一样。注意,索引从0开始,直到容器的 size()-1。

  需要注意的是,当使用 operator[] 运算符访问容器的元素时,没有边界检查。因此,如果索引超出容器的有效范围,会导致未定义的行为。在实际应用中,确保索引的合法性是非常重要的。

  以下是operator[]的定义和使用示例:

#include <iostream>
#include <vector>int main() {std::vector<int> numbers = {10, 20, 30, 40, 50};std::cout << "容器的元素为:";for (size_t i = 0; i < numbers.size(); ++i) {std::cout << numbers[i] << " ";}std::cout << std::endl;return 0;
}//容器的元素为:10 20 30 40 50

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

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

相关文章

手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(中篇)

近期因俗事缠身&#xff0c;《通过理解LSTM的反向传播过程&#xff0c;理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式&#xff0c;配超多图帮助理解》的中下篇鸽了实在太久有些不好意思了。为了避免烂尾&#xff0c;还是抽时间补上&#xff08;上篇在此&…

带你用Python制作7个程序,让你感受到端午节的快乐

名字:阿玥的小东东 学习:Python、C/C++ 主页链接:阿玥的小东东的博客_CSDN博客-python&&c++高级知识,过年必备,C/C++知识讲解领域博主 目录 前言 程序1:制作粽子

Spring Boot进阶(57):Spring中什么时候不要用@Autowired注入 | 超级详细,建议收藏

1. 前言&#x1f525; 注解Autowired&#xff0c;相信对于我们Java开发者而言并不陌生吧&#xff0c;在SpringBoot或SpringCloud框架中使用那是非常的广泛。但是当我们使用IDEA编辑器开发代码的时候&#xff0c;经常会发现Autowired 注解下面提示小黄线警告&#xff0c;我们把小…

Redis【实战篇】---- 分布式锁

Redis【实战篇】---- 分布式锁 1. 基本原理和实现方式对比2. Redis分布式锁的实现核心思路3. 实现分布式锁版本一4. Redis分布式锁误删情况说明5. 解决Redis分布式锁误删问题6. 分布式锁的原子性问题7. Lua脚本解决多条命令原子性问题8. 利用Java代码调试Lua脚本改造分布式锁 1…

css背景毛玻璃效果

一、结论&#xff1a;通过 css 的 backdrop-filter 属性设置滤镜函数 blur 一般会是有 背景色、透明度 的容器&#xff0c;如&#xff1a; /* 宽高等其他设置这里省略没写 */ background:rgba(3, 87, 255, 0.3); backdrop-filter: blur(10px);二、backdrop-filter 的其他用法…

Mysql教程(四):DML学习

Mysql教程&#xff08;四&#xff09;&#xff1a;DML学习 前言 DML-介绍 DML英文全称是Data Manipulation Language数据库操作语言&#xff0c;用来对数据库中表的数据记录进行增删改查。 添加数据&#xff08;INSERT&#xff09;修改数据&#xff08;UPDATE&#xff09;删除…

走访慰问空巢老人,连接传递浓浓温情

为了弘扬中华民族尊老、敬老、爱老的优良传统&#xff0c;让老人们感受到政府和社会的温暖&#xff0c;在“端午”来临之际&#xff0c;思南县青年志愿者协会联合思南县民慈社会工作服务中心、思南县小荧星幼儿园、思南县小英豪幼儿园到大河坝镇天坝村开展“走访慰问空巢老人&a…

springboot整合eureka、config搭建注册中心和配置中心

目录 一 、springboot整合eureka实现注册中心 二、springboot整合config实现配置中心 三、从配置中心拉取配置 这篇文章详细介绍怎么通过eureka和config分别搭建一个注册中心和配置中心的服务。 一 、springboot整合eureka实现注册中心 1、创建一个springboot项目&#xff…

LRU 算法,但 get 和 put 必须 O(1),用哈希表

https://leetcode.cn/problems/lru-cache/ 题目有key、value的&#xff0c;直接就上map了 结果&#xff1a;&#x1f605; 仔细一看&#xff0c;原来要 get 和 put 必须 O(1) 只能抛弃树型数据结构了 线性的数据结构也可以吧&#xff0c;如果可以构造出一个队列&#xff0c…

Appium+python自动化(十一)- 元素定位- 下卷超详解)

1、 List定位 List故名思义就是一个列表&#xff0c;在python里面也有list这一个说法&#xff0c;如果你不是很理解什么是list&#xff0c;这里暂且理解为一个数组或者说一个集合。首先一个list是一个集合&#xff0c;那么他的个数也就成了不确定性&#xff0c;所以这里需要用复…

【InsCode Stable Diffusion 美图活动一期】生成着玩

此为内容创作模板&#xff0c;请按照格式补充内容&#xff0c;在发布之前请将不必要的内容删除 一、 Stable Diffusion 模型在线使用地址&#xff1a; https://inscode.csdn.net/inscode/Stable-Diffusion 二、模型相关版本和参数配置&#xff1a; 三、图片生成提示词与反向…

春秋云境—Initial

文章目录 春秋云境—Initial一、前期准备1、靶标介绍2、相关设备 二、WEB渗透1、ThinkPHP RCE&#xff08;1&#xff09;、打开网站&#xff08;2&#xff09;、检测漏洞 2、蚁剑连接3、sudo提权4、frpc代理5、fsacn扫描 三、后渗透1、信呼OA RCE&#xff08;1&#xff09;、1.…

npm安装依赖报错Unexpected token ‘.‘ 处理

1. 问题 在用nvm切换高版本node版本之后npm install安装项目依赖时报错如下&#xff1a; npm ERR! Unexpected token . 日志信息如下&#xff1a; 报错信息量很少&#xff0c;但是跟高版本node环境下安装依赖有关系。 2. 解决思路 安装低版本的node环境运行项目&#xff…

RabbitMQ死信交换机、TTL及延迟队列

一&#xff0c;死信交换机 1&#xff0c;什么是死信交换机 了解死信交换机之前我们先来了解一下什么是死信&#xff0c;当一个队列满足下面的三种情况的时候我们一般称为死信&#xff08;dead letter&#xff09;&#xff1a; 消费者使用basic.reject或 basic.nack声明消费失…

petalinux 无法通过SDK进行TCF调试

IP地址设置没问题 但是无法进行DEBUG 原因是没有开启debug模式&#xff0c;做下图设置重新编译程序生成BOOT.bin即可

追踪 Kubernetes 中的 DNS 查询

在过去的文章中&#xff0c;我们曾 追踪过 Kubernetes 中的网络数据包&#xff0c;这篇文章将追踪 Kubernetes 中的 DNS 查询。 让我们以在 Pod 中解析 Service 完全限定域名&#xff08;FQDN&#xff09; foo.bar.svc.cluster.local 为例。 在开始之前&#xff0c;先回顾下 …

微信小程序的目录解析--【浅入深出系列001外篇】

浅入深出系列总目录在000集 如何0元学微信小程序–【浅入深出系列000】 文章目录 本系列校训学习资源的选择先说总目录经常碰到的文件(目录&#xff09;最最常见的目录pages次最常用的就是images 目录 操作起来真正的操作 配套资源 本系列校训 用免费公开视频&#xff0c;卷…

串口wifi6+蓝牙二合一系列模块选型参考和外围电路参考设计-WG236/WG237

针对物联网数据传输&#xff0c;智能控制等应用场景研发推出的高集成小尺寸串口WiFi串口蓝牙的二合一组合模块。WiFi符合802.11a/b/g/n无线标准&#xff0c;蓝牙支持低功耗蓝牙V4.2/V5.0 BLE/V2.1和EDR&#xff0c;WiFi部分的接口是UART&#xff0c;蓝牙部分是UART/PCM 接口。模…

3Ds max图文教程:高精度篮球3D建模

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 第 1 步。使用以下设置在顶部视口上创建球体&#xff1a; 第 2 步。将球体转换为可编辑的多边形&#xff1a; 第 3 步。转到 Edge 子对象级别并剪切以下边缘&#xff1a; 第 4 步。选择以下边&#xff0c;然…

什么是 Elasticsearch 索引?

作者&#xff1a;David Brimley 索引这个术语在科技界已经被用满了。 如果你问大多数开发人员什么是索引&#xff0c;他们可能会告诉你索引通常指的是关系数据库 (RDBMS) 中与表关联的数据结构&#xff0c;它提高了数据检索操作的速度。 但什么是 Elasticsearch 索引&#xff…