C++之vector迭代器函数begin、end、rebegin、rend、cbegin、cend、crbegin、crend总结(二百零一)

news2024/11/26 16:46:31

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:理解C++之vector成员函数begin、end、rebegin、rend、cbegin、cend、crbegin、crend作用。

C++的vector是一种动态数组,它提供了一系列成员函数来操作和访问其元素。下面是这些成员函数的作用和用法:

    1. begin():返回指向vector第一个元素的迭代器。
    1. end():返回指向vector最后一个元素的下一个位置的迭代器。
    1. rbegin():返回指向vector最后一个元素的迭代器,用于逆向遍历。
    1. rend():返回指向vector第一个元素前一个位置的逆向迭代器,用于逆向遍历的结束位置。
    1. cbegin():与begin()类似,返回指向vector第一个元素的const迭代器,不允许修改元素。
    1. cend():与end()类似,返回指向vector最后一个元素的下一个位置的const迭代器,不允许修改元素。
    1. crbegin():与rbegin()类似,返回指向vector最后一个元素的const逆向迭代器,逆向不可修改。
    1. crend():与rend()类似,返回指向vector第一个元素前一个位置的const逆向迭代器,逆向不可修改。

2.应用实例

1. begin()函数返回一个指向vector第一个元素的迭代器。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用begin()函数获取第一个元素的迭代器
    std::vector<int>::iterator it = vec.begin();

    // 输出第一个元素
    std::cout << "第一个元素:" << *it << std::endl;

    return 0;
}

2. end()函数返回一个指向vector最后一个元素的下一个位置的迭代器。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用end()函数获取最后一个元素的下一个位置的迭代器
    std::vector<int>::iterator it = vec.end();

    // 输出最后一个元素的下一个位置的元素,此时应为未定义的值
    std::cout << "最后一个元素的下一个位置的元素:" << *it << std::endl;

    return 0;
}

3. rbegin()函数返回一个指向vector最后一个元素的逆向迭代器。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用rbegin()函数获取最后一个元素的逆向迭代器
    std::vector<int>::reverse_iterator rit = vec.rbegin();

    // 输出最后一个元素
    std::cout << "最后一个元素:" << *rit << std::endl;

    return 0;
}

4. rend()函数返回一个指向vector第一个元素的前一个位置的逆向迭代器。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用rend()函数获取第一个元素的前一个位置的逆向迭代器
    std::vector<int>::reverse_iterator rit = vec.rend();

    // 输出第一个元素的前一个位置的元素,此时应为未定义的值
    std::cout << "第一个元素的前一个位置的元素:" << *rit << std::endl;

    return 0;
}

5. cbegin()函数与begin()类似,返回一个指向vector第一个元素的const迭代器,用于访问vector的元素但不能修改它们。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用cbegin()函数获取第一个元素的const迭代器
    std::vector<int>::const_iterator it = vec.cbegin();

    // 尝试修改第一个元素,将会编译错误
    //*it = 10;

    // 输出第一个元素
    std::cout << "第一个元素:" << *it << std::endl;

    return 0;
}

6. cend()函数与end()类似,返回一个指向vector最后一个元素的下一个位置的const迭代器,用于访问vector的元素但不能修改它们。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用cend()函数获取最后一个元素的下一个位置的const迭代器
    std::vector<int>::const_iterator it = vec.cend();

    // 尝试修改最后一个元素的下一个位置的元素,将会编译错误
    //*it = 10;

    // 输出最后一个元素的下一个位置的元素,此时应为未定义的值
    std::cout << "最后一个元素的下一个位置的元素:" << *it << std::endl;

    return 0;
}

7. crbegin()函数与rbegin()类似,返回一个指向vector最后一个元素的const逆向迭代器,用于访问vector的元素但不能修改它们。

#include <iostream>
#include <vector>
int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用crbegin()函数获取最后一个元素的const逆向迭代器
    std::vector<int>::const_reverse_iterator rit = vec.crbegin();

    // 尝试修改最后一个元素,将会编译错误
    //*rit = 10;

    // 输出最后一个元素
    std::cout << "最后一个元素:" << *rit << std::endl;

    return 0;
}

8. crend()函数与rend()类似,返回一个指向vector第一个元素的前一个位置的const逆向迭代器,用于访问vector的元素但不能修改它们。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用crend()函数获取第一个元素的前一个位置的const逆向迭代器
    std::vector<int>::const_reverse_iterator rit = vec.crend();

    // 尝试修改第一个元素的前一个位置的元素,将会编译错误
    //*rit = 10;

    // 输出第一个元素的前一个位置的元素,此时应为未定义的值
    std::cout << "第一个元素的前一个位置的元素:" << *rit << std::endl;

    return 0;
}

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

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

相关文章

视频监控管理平台/视频汇聚/视频云存储EasyCVR安全检查的相关问题及解决方法3.0

智能视频监控系统/视频云存储/集中存储/视频汇聚平台EasyCVR具备视频融合汇聚能力&#xff0c;作为安防视频监控综合管理平台&#xff0c;它支持多协议接入、多格式视频流分发&#xff0c;视频监控综合管理平台EasyCVR支持海量视频汇聚管理&#xff0c;可应用在多样化的场景上&…

Weblogic SSRF漏洞

Weblogic SSRF漏洞 1.环境搭建 http://10.9.75.198:7001/uddiexplorer/2.漏洞复现 SSRF漏洞存在于http://10.9.75.198:7001/uddiexplorer/SearchPublicRegistries.jsp2.1bp抓包&#xff0c;测试该漏洞。通过测试端口&#xff0c;查看哪个端口能够进行具体得操作 可访问的端…

虚拟机作为master远程控制台式机中的机器人在仿真环境中进行slam地图构建与自主导航

文章目录 前言一、思路流程二、具体步骤1.虚拟机网络配置2.台式机网络配置3.网络测试 三、远程操控SLAM建立地图三、远程操控SLAM导航 前言 虚拟机作为master远程控制台式机中的机器人在仿真环境中进行slam地图构建与自主导航 最近有时间一直在搞Ubuntu虚拟机与台式机的通讯&…

承载22倍于自身重量前行,垂直跳跃59厘米,用爆炸驱动的昆虫机器人来了

这款机器人由来自康奈尔大学的研究者研发&#xff0c;该机器人长 29 毫米&#xff0c;重量仅为 1.6 克&#xff0c;可以垂直跳跃 59 厘米&#xff0c;并且可以携带 22 倍&#xff08;36 克&#xff09;于自身重量的物品行走。 小小机器人能量大爆发&#xff0c;身体如昆虫一般大…

企业架构LNMP学习笔记46

PHP测试连接代码&#xff1a; php代码测试使用memcached&#xff1a; 示例代码&#xff1a; <?php //实例化类 $mem new memcached(); //调用连接memcached方法 注意连接地址和端口号 $mem->addServer(192.168.17.114,11211); //存数据 var_dump($mem->set(name,l…

文件批量重命名:自定义命名与扩展名更改

你是否曾经需要批量更改文件名称和类型&#xff1f;如果你有大量文件需要重命名和更改类型&#xff0c;那么今天我们将向你介绍一种简单的方法来轻松批量更改文件名称和类型。无论你是需要将一个文件夹中的所有图片改为另一种格式&#xff0c;还是需要将一个文件夹中的所有文档…

无涯教程-JavaScript - IFERROR函数

描述 如果公式的计算输出为错误,则IFERROR函数将返回您指定的值。否则,返回公式的输出。使用IFERROR函数可以捕获和处理公式中的错误。 语法 IFERROR (value, value_if_error) 争论 Argument描述Required/OptionalvalueThe argument that is checked for an error.Required…

IDEA 打包MapReduce程序到集群运行的两种方式以及XShell和Xftp过期的解决

参考博客 【MapReduce打包成jar上传到集群运行】http://t.csdn.cn/2gK1d 【Xshell7/Xftp7 解决强制更新问题】http://t.csdn.cn/rxiBG IDEA打包MapReduce程序&#xff08;方式一&#xff09;【轻量级打包】 这里的打包是打包整个项目&#xff0c;后期等学会怎么打包单个指定…

Alfred v5.1.2(Mac应用快速启动)

Mac效率办公软件哪个好&#xff1f;Alfred是一款Mac电脑上的快速启动和工作流自动化工具&#xff0c;它可以帮助用户快速访问文件、应用程序、web搜索和系统工具&#xff0c;提高工作效率。以下是Alfred的特点&#xff1a; 快速启动&#xff1a;用户可以通过Alfred快速启动应用…

[k8s] 常见yml配置和详细解释

在 Kubernetes (K8s) 中&#xff0c;常见的 YAML 文件配置包括&#xff1a; 文章目录 PodDeploymentServiceIngressConfigMapSecretVolume访问模式 StatefulSetDaemonSetJob容器的重启策略 ConJob Pod apiVersion: v1 kind: Pod metadata:name: my-pod # Pod 的名称labels:ap…

使用命令行创建一个vue项目卡住不动如何解决

问题 在使用命令去创建一个vue项目&#xff0c; 出现下面卡住不动的一个状态。 解决方案一 首先先ctrlc停止进入创建好的项目文件手动输入npm install 、npm run dev如果npm run dev 的时候 出现 ‘vite’ 相关的错误查看node版本是否是最新的稳定版本node -v查看安装源是否…

国家网络安全周 | 天空卫士CEO刘霖在《中国网信》杂志发表署名文章

由中共中央网络安全和信息化委员会办公室、中华人民共和国国家互联网信息办公室主管的《中国网信》2023年第9期总第21期&#xff0c;在2023年国家网络安全宣传周开幕式时同期发布。《中国网信》杂志致力于宣传解读中央网络安全和信息化委员会及其办公室的重大决策部署和重点工作…

创建HTTP请求的几种方式

一. HTML表单标签创建 form 的重要参数: action: 构造的 HTTP 请求的 URL 是什么. method: 构造的 HTTP 请求的 方法 是 GET 还是 POST (form 只支持 GET 和 POST). input 的重要参数: type: 表示输入框的类型. text 表示文本, password 表示密码, submit 表示提交按钮. name…

青大数据结构【2013】

关键字&#xff1a; 邻接表空间复杂度、求无向图连通分量&#xff08;BFS、DFS&#xff09;、B树根节点最小关键字、平均查找长度最小的排序、二叉树排序叶子结点次序不变、不同次序建立二叉排序树及中序遍历、直接插入排序特点、强连通分量、邻接矩阵邻接表、折半查找判定树、…

Blender批量修改名称

假如在Blender里按顺序添加了多个mesh&#xff0c;名字后缀按照数字1,2,3…编号&#xff0c;此时又要插入一个新的mesh&#xff0c;那么这个mesh之后的其它mesh名字都要加1&#xff0c;此时该怎么办呢&#xff1f; 比较简单的办法是把新mesh后面的mesh名称一个一个手动加1&…

软件工程知识总结梳理

&#x1f525;&#x1f525;宏夏Coding网站&#xff0c;致力于为编程学习者、互联网求职者提供最需要的内容&#xff01;网站内容包括求职秘籍&#xff0c;葵花宝典&#xff08;学习笔记&#xff09;&#xff0c;资源推荐等内容。在线阅读&#xff1a;https://hongxiac.com&…

密码学【一】

前言 在区块链的整个体系中大量使用了密码学算法&#xff0c;比如用于 PoW 的哈希算法&#xff0c;用于完整性验证的 Merkle Tree&#xff0c;用于交易签名与验证的数字签名算法&#xff0c;用于隐私保护的零知识证明等等。 可以说密码学是保证区块链安全的基石&#xff0c;而区…

YOLOv5算法改进(17)— 更换损失函数(EIoU、AlphaIoU、SIoU和WIoU)

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。损失函数&#xff08;loss function&#xff09;是机器学习中用来衡量模型预测值与真实值之间差异的函数。它用于度量模型在训练过程中的性能&#xff0c;以便优化模型参数。在训练过程中&#xff0c;损失函数会根据模型的…

C# 扫描并读取图片中的文字(.NET Core)

本文介绍如何通过C# 程序来扫描并读取图片中的文字&#xff0c;这里以创建一个.Net Core程序为例。下面是具体步骤&#xff0c;供参考。 程序测试环境&#xff1a; Visual Studio版本要求不低于2017 图片扫描工具&#xff1a;Spire.OCR for .NET 图片格式&#xff1a;png&…

LCP 50. 宝石补给

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;模拟 写在最后 Tag 【模拟】【数组】 题目来源 LCP 50. 宝石补给 题目解读 根据 operations 数组将 x 勇士的一半宝石&#xff08;向下取整&#xff09;赠送给 y 勇士&#xff0c;最后输出拥有最多宝石的勇士与拥有最…