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

news2024/10/7 20:26:02

文章目录

  • 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); // 添加元素 10
    numbers.push_back(20); // 添加元素 20
    numbers.push_back(30); // 添加元素 30

    std::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 插入一个元素 15
    auto 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, 35
    numbers.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.coloradmin.cn/o/767521.html

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

相关文章

EXCEl——单元格移除换行

方法一&#xff1a;使用清除格式功能 步骤如下: 1.选中需要取消换行的单元格 2.在“开始"选项卡中找到"清除”功能&#xff0c;点击下拉菜单中的“清除格式" 3.这时单元格的换行就被取消了。 清除前效果图 清除后效果图 方法一&#xff1a;使用函数功能 步骤…

Camtasia Studio 2023保存为mp4格式的视频的详细教程,Camtasia的视频导出功能

很多用户刚接触Camtasia Studio&#xff0c;不熟悉如何保存mp4格式的视频。在今天的文章中小编为大家带来了Camtasia Studio 2023保存为mp4格式的视频的详细教程介绍。 1、 打开Camtasia Studio。 Camtasia Studio- 2023 win&#xff1a; https://souurl.cn/1JFEsn Camtasia …

HACKATHONCTF_1靶场详解

HACKATHONCTF_1靶场复盘 这个靶场有点CTF感觉&#xff0c;一步一步的没有什么难度。 下载地址&#xff1a;https://download.vulnhub.com/hackathonctf/ctf.zip 扫到ip后对ip进行一个单独扫描&#xff0c;发现开了四个端口&#xff0c;ssh设置到7223上了&#xff0c;这个很重…

SPP、SPPF 、 SimSPPF 、 ASPP、 SPPCSPC详解

分享自&#xff1a;https://blog.csdn.net/weixin_43694096/article/details/126354660 1. 原理 1.1 SPP&#xff08;Spatial Pyramid Pooling&#xff09; SPP 模块是何凯大神在2015年的论文《Spatial Pyramid Pooling in Deep Convolution Networks for Visual Recognitio…

前端工程化第一章:webpack基础(上)

文章目录 1. 什么是webpack&#xff1f;2. webpack使用2.2. 前置知识2.1. 创建一个项目 3. webpack打包3.1. 创建一个webpack.config.js文件3.2. 入口&#xff08;entry&#xff09;3.2.1. webpack.config.js3.2.2. src/index.js3.2.3. package.json 3.3. 输出&#xff08;outp…

C++第三讲

思维导图 手动封装一个顺序栈类&#xff08;数据元素为整形&#xff09;&#xff0c;要求私有成员属性&#xff1a;堆区空间的指针&#xff0c;用于存放数据&#xff0c;和一个指向栈顶元素的变量 /* ---------------------------------author&#xff1a;YoungZorncreated on…

nacos集群地址配置问题

#it is ip #example 127.0.0.1:8848 127.0.0.1:8849 127.0.0.1:8850 上面的配置可能存在配置失败的情况,可以采用下面的配置 127.0.0.1:8845 127.0.0.1.8846 127.0.0.1.8847 该配置在cluster.conf文件里面

还在使用冒泡排序遍历数组?No No No 库函数qsort帮你搞定所有排序还不快学起来!

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《快速入门C语言》《C语言初阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言&#x1f4ac; 库函数qsort的介绍&#x1f4ac; 库函数qsort的参数介绍&#x1f4ad; 参数一 (void* base)…

Acwing.908 最大不相交区间数量(贪心)

题目 给定N个闭区间[ai,bi]&#xff0c;请你在数轴上选择若干区间&#xff0c;使得选中的区间之间互不相交&#xff08;包括端点)。输出可选取区间的最大数量。 输入格式 第一行包含整数N&#xff0c;表示区间数。 接下来N行&#xff0c;每行包含两个整数ai , bi&#xff0c…

【基于 GitLab 的 CI/CD 实践】03、GitLab Pipeline 实践(上)

目录 一、GitLab Pipeline 流水线语法有哪些&#xff1f;流水线参数列表 如何检查语法错误&#xff1f;流水线语法检测 二、Pipeline 基础语法 job script before_script after_script stages 未定义 stages ​定义 stages 控制 stage 运行顺序 .pre & .post …

2010年中国生态系统服务空间数据集

摘要 生态系统服务是生态系统形成并维持的人类赖以生存和发展的环境条件与效用&#xff0c;是测度自然生态系统保护价值的重要指标。采用科学方法模拟生态系统服务的空间分布对掌握当前我国生态本底状况&#xff0c;识别生态保护重要区&#xff0c;从而有效支持生态管理决策具…

关于金融英语的翻译技巧,你了解多少呢

据了解&#xff0c;金融英语除了具备通用英语特点之外 &#xff0c;还具备自己独特的特征&#xff0c;如专有名词多、专业术语量大、专业缩略词等。为了确保译文的准确性&#xff0c;翻译金融英语时要注意以下几点技巧。 一、专业术语坚持直译。金融翻译中涉及大量金融英语特有…

day10_practice

用面向对象思想实现数据分析 1、设计类&#xff0c;完成数据封装 2、设计抽象类&#xff0c;定义文件读取相关功能&#xff0c;使用子类实现具体功能(由于两份文件格式不同) 3、读取文件&#xff0c;产生数据对象 4、计算每天销售额 5、绘图 一、数据封装类设计 ""…

Python读取骑行fit文件

目录 故事背景安装输出有心率和无心率的数据为NO.fit文件增加心率数据并保存参考文献 故事背景 有一天&#xff0c;我使用wahoo码表骑行记录了一段没有心率带的数据&#xff0c;导出fit文件至电脑。上传至捷安特APP&#xff0c;结果说数据不完整&#xff0c;此时想用代码把心率…

以结果为导向的网络安全需要全面的方法

Positive Technologies 信息安全分析师 Fedor Chunizhekov 谈论了该地区不断变化的网络安全形势&#xff0c;并重点介绍了其 "中东网络安全威胁形势 "报告中影响中东地区的要点。他还强调&#xff0c;为了解决核心安全问题&#xff0c;我们需要采用一种全面的方法来实…

安全性测试的测试点

安全性测试的测试点 1.跨网站脚本攻击 通过脚本语言的缺陷模拟合法用户&#xff0c;控制其账户&#xff0c;盗窃敏感数据 2.注入攻击 通过构造查询对数据库、LDAP和其他系统进行非法查询 3.恶意文件执行 在服务器上执行Shell 命令Execute&#xff0c;获取控制权 4.伪造跨…

企业如何选择通配符SSL证书?

很多企业网站因为业务需要&#xff0c;在同一个主域名下通常会有多个子域名。在这种情况下申请SSL证书就要很慎重&#xff0c;既要考虑到网站安全需要&#xff0c;又要考虑经济实惠。因此 OV 型的通配符证书非常适合这类企业网站。 为什么要选择通配符SSL证书&#xff1f; 通…

(Linux)查看端口占用并关闭进程

端口 查看端口占用 查看端口占用netstat -anp | grep 端口号 → 列出所有端口netstat -tunlp |grep 3306 → 端口号netstat -tunlp |grep mysql → 进程名称netstat -tunlp |grep 29520 → 进程IDnetstat -tunlp | grep 3306-t: 显示 TCP 连接-u: 显示 UDP 连接-n: 显示数字…

(linux) 查看日志文件

工作用常用 服务器查看日志cat opt/service/logs/logfile.log查看 logfile.log 日志文件tail -f -n -500 opt/service/logs/logfile.log动态查看日志vim opt/service/logs/file.logvi opt/service/logs/file.log可以快速查看日志第一行cat opt/service/logs/logfile.log | gre…

idea 自定义类注释模板和方法模板,无警告

背景&#xff1a;idea&#xff1a;IntelliJ IDEA 2023.1.3 (Ultimate Edition) 效果&#xff1a;&#xff08;主要是没无参&#xff0c;不会换行&#xff09; 类&#xff1a; /** * author sss* date ${DATE} on ${TIME}* desc $NAME*/# 完全复制上面的&#xff0c;删除这一行…