C++STL容器vector迭代器相关函数

news2024/12/24 21:17:05

目录

前言

主要参考

vector::begin

vector::end

vector::rbegin

vector::rend

vector::cbegin等常量迭代器相关.

共勉


前言

        本文将讨论STL容器vector中与迭代器相关的函数,模板参数T为int类型

主要参考

        cpluscplus.com

        侯捷《STL源码剖析》

        通义

vector::begin

iterator begin();

参数:

返回值: 返回指向序列容器的开始位置迭代器。iterator 类型的值

功能: 

  • 返回指向vector中第一个元素的迭代器。
  • 请注意,与成员vector::front不同,该函数返回一个可访问随机访问迭代器。如果容器为空,则返回的迭代器值不得解引用。

案例:

#include <iostream>
#include <vector>

int main()
{
    std::cout << std::endl;
    std::vector<int> ints{11, 12, 13, 14, 15, 16};
        
    // 使用std::begin 获取 第一个元素
    std::vector<int>::iterator a = ints.begin();
    std::cout << *a << std::endl;

    // 使用std::begin 和 std::end  实现vector对象的遍历
    for (std::vector<int>::iterator it = ints.begin(); it != ints.end(); it++)
    {
        std::cout << *it << ' ';
    }
    std::cout << std::endl;
    std::cout << std::endl;
    
    // 容器为空情况, 解引用begin迭代器, 会导致程序崩溃
    // std::vector<int> test_err;
    // std::vector<int>::iterator test = test_err.begin();
    // std::cout << *test << std::endl;

    return 0;
}

运行结果

vector::end

iterator end();

参数:

返回值: 指向序列末尾之后的元素迭代器。iterator 类型的值

功能: 

  • 返回迭代器到末尾 返回指向vector容器中末尾元素的迭代器。
  • 末尾元素是理论上的元素,它会跟随vector中的最后一个元素。它不指向任何元素,因此不应被解引用。
  • 由于标准库函数使用的范围不包括由其闭合迭代器所指的元素,因此该功能通常与vector::begin一起使用以指定包含容器中所有元素的范围。
  • 如果容器为空,则此函数将返回与vector::begin相同的结果。

案例:

#include <iostream>
#include <vector>

int main()
{
    std::cout << std::endl;
    std::vector<int> ints{ 11, 12, 13, 14, 15, 16 };

    // 使用std::begin 和 std::end  实现vector对象的遍历
    // std::end 作为结束的标志
    std::cout << "vector遍历的结果为: ";
    for (std::vector<int>::iterator it = ints.begin(); it != ints.end(); it++)
    {
        std::cout << *it << ' ';
    }
    std::cout << std::endl;
    std::cout << std::endl;

     解引用std::end 会导致程序错误。
    //std::vector<int>::iterator test = ints.end();
    //std::cout << *test << std::endl;

    return 0;
}

运行结果

vector::rbegin

reverse_iterator rbegin();

参数:

返回值: vector的逆向开始处的逆向迭代器,  reverse_iterator 类型的值

功能: 

  • 返回指向vector中最后一个元素的反向迭代器(即,其反向开始)。
  • 反向迭代器从后向前遍历:增加它们会将它们移动到容器的开头。
  • rbegin指针指向成员end所指向的那个元素之前的一个元素。

案例:

#include <iostream>
#include <vector>

int main()
{
    std::cout << std::endl;
    std::vector<int> ints{11, 12, 13, 14, 15, 16};

    // 使用std::rbegin 和 std::rend  实现vector对象的逆序遍历
    // std::end 作为结束的标志
    std::cout << "vector遍历的结果为: ";
    for (std::vector<int>::reverse_iterator it = ints.rbegin(); it != ints.rend(); it++)
    {
        std::cout << *it << ' ';
    }
    std::cout << std::endl;
    std::cout << std::endl;

    return 0;
}

运行结果

vector::rend

reverse_iterator rend();

参数:

返回值: vector的逆向结尾处的逆向迭代器.reverse_iterator 类型的值

功能:

  • 返回反向迭代器到反向末尾
  • 返回指向理论元素的反向迭代器,该元素在vector中的第一个元素之前(被认为是其反向末尾)。

案例:

#include <iostream>
#include <vector>

int main()
{
    std::cout << std::endl;
    std::vector<int> ints{11, 12, 13, 14, 15, 16};

    // 使用std::rbegin 和 std::rend  实现vector对象的逆序遍历
    std::cout << "vector逆序遍历的结果为: ";
    for (std::vector<int>::reverse_iterator it = ints.rbegin(); it != ints.rend(); it++)
    {
        std::cout << *it << ' ';
    }
    std::cout << std::endl;
    std::cout << std::endl;
    return 0;
}

 运行结果

vector::cbegin等常量迭代器相关.

const_iterator cbegin();

参数:

返回值: vector起始位置的一个常量迭代器。const_iterator 类型的值

功能: 

  • 返回指向容器中第一个元素的const迭代器。
  • const迭代器是一个指针到常量内容的迭代器。这个迭代器可以增加和减少(除非它本身也是常量),就像vector::begin返回的迭代器一样,但它不能用于修改所指向的内容,即使vector对象不是自身是常量。
  • 如果容器为空,则返回的迭代器值不得解引用。

案例:

#include <iostream>
#include <vector>

int main()
{
    std::cout << std::endl;
    std::vector<int> ints{11, 12, 13, 14, 15, 16};
    // 使用std::rbegin 和 std::rend  实现vector对象的逆序遍历
    std::cout << "vector逆序遍历的结果为: ";
    for (std::vector<int>::const_iterator it = ints.cbegin(); it != ints.cend(); it++)
    {
        // err常量数据无法修改。
        // *it = 20;
        std::cout << *it << ' ';
    }
    std::cout << std::endl;
    std::cout << std::endl;

    return 0;
}

vector::cend, vector::crbegin, vector::crend 都是上面讨论过的常量版本,在这里就不再赘述了。有什么问题可以私信或者评论区讨论。

共勉

        希望本文能给你带来帮助,如果有什么问题或疑问欢迎评论区和私信讨论。谢谢点赞、收藏、关注。

感谢阅读

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

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

相关文章

R语言森林生态系统结构、功能与稳定性分析与可视化实践高级应用

在生态学研究中&#xff0c;森林生态系统的结构、功能与稳定性是核心研究内容之一。这些方面不仅关系到森林动态变化和物种多样性&#xff0c;还直接影响森林提供的生态服务功能及其应对环境变化的能力。森林生态系统的结构主要包括物种组成、树种多样性、树木的空间分布与密度…

如何利用微型5G网关为智慧无人矿车提供精确定位

随着5G、AI、物联网技术的发展和普及&#xff0c;越来越多行业正在加快生产、运营、管理的无人化、数字化与智能化&#xff0c;以适应当前我国“智慧、绿色、低碳”的新型发展模式需要。其中矿产业就是典型场景之一。针对矿山场景的智慧化、无人化转型&#xff0c;佰马提供基于…

我的第一个创作纪念日 —— 梦开始的地方

前言 时光荏苒&#xff0c;转眼间&#xff0c;我已经在CSDN这片技术沃土上耕耘了365天 今天&#xff0c;我迎来了自己在CSDN的第1个创作纪念日&#xff0c;这个特殊的日子不仅是对我过去努力的肯定&#xff0c;更是对未来持续创作的激励 机缘 回想起初次接触CSDN&#xff0c;那…

playwright 学习复仇记-2 Selector选择器定位元素

前言 Selector 选择器&#xff0c;也就是通常说的元素定位了&#xff0c;页面上点点点的操作&#xff0c;都是基于元素定位&#xff0c;所以这块是重点需要学的核心内容。 Selector 选择器 说到元素定位&#xff0c;大家肯定会首先想到 selenium 的八大元素定位&#xff0c;其…

【Delphi】modbus-TCP 协议库

在日常开发中&#xff0c;也会遇到使用modbus的部件&#xff0c;比如温度控制器、读卡器等等&#xff0c;那么使用Delphi开发&#xff0c;也就必须遵守modbus-TCP协议&#xff0c;如果自己使用TCP控件写也没有问题&#xff0c;不过如果有开源的三方库&#xff0c;别人已经调试过…

深度神经网络模型压缩学习笔记一:模型压缩概述

文章目录 一、模型压缩主要常用方法1&#xff09;量化&#xff08;1&#xff09;scale和Qint8的计算、对称性和非对称性量化&#xff08;2&#xff09;静态量化和动态量化&#xff08;3&#xff09;量化粒度选择和PTQ\QAT分类&#xff08;4&#xff09;模型量化技术为什么会带来…

架构师:Dubbo 服务请求失败处理的实践指南

1、简述 在分布式服务中,服务调用失败是不可避免的,可能由于网络抖动、服务不可用等原因导致。Dubbo 作为一款高性能的 RPC 框架,提供了多种机制来处理服务请求失败问题。本文将介绍如何在 Dubbo 中优雅地处理服务请求失败,并结合具体实践步骤进行讲解。 2、常见处理方式 …

YoloV10-yaml文件理解

最近在学习和尝试改进yolov结记录一下原始代码的理解,希望大佬指正.10,在这里总 [1] 论文&#xff1a;https://arxiv.org/abs/2405.14458 [2] 代码&#xff1a;GitHub - THU-MIG/yolov10: YOLOv10: Real-Time End-to-End Object Detection [NeurIPS 2024] YOLOv10的新特性 1. 无…

Flutter:city_pickers省市区三级联动

pubspec.yaml city_pickers插件地址 自己用的GetBuilder页面模板 cupertino_icons: ^1.0.8 # 省市区城市选择 city_pickers: ^1.3.0编辑地址页面&#xff1a;controller class AddressEditController extends GetxController {AddressEditController();Future<Result?>…

【C语言】结构体(一)

一&#xff0c;是什么 结构体就是一些值的集合&#xff0c;这些值称为成员变量。 结构体的每个成员可以是不同类型的变量。说到集合&#xff0c;数组也是集合&#xff0c;但是不同的是数组只能是相同类型元素的集合。 二&#xff0c;结构体的声明 struct tag {   member1;…

请求头referer #号后的截掉了

解决办法&#xff1a; 用传参方式不要用refer和Refer&#xff0c;用其它名字

PostgreSQL最常用数据类型-重点说明自增主键处理

简介 PostgreSQL提供了非常丰富的数据类型&#xff0c;我们平常使用最多的基本就3类&#xff1a; 数字类型字符类型时间类型 这篇文章重点介绍这3中类型&#xff0c;因为对于高并发项目还是推荐&#xff1a;尽量使用简单类型&#xff0c;把运算和逻辑放在应用中&#xff0c;…

【深度学习】四大图像分类网络之ResNet

ResNet网络是在2015年由微软实验室中的何凯明等几位提出&#xff0c;在CVPR 2016发表影响深远的网络模型&#xff0c;由何凯明团队提出来&#xff0c;在ImageNet的分类比赛上将网络深度直接提高到了152层&#xff0c;前一年夺冠的VGG只有19层。斩获当年ImageNet竞赛中分类任务第…

基于树莓派的安保巡逻机器人--项目介绍

目录 一、项目简介 二、项目背景 三、作品研发技术方案 作品主要内容&#xff1a; 方案的科学性 设计的合理性 四、作品创新性及特点 五、作品自我评价 本篇为项目“基于树莓派的安保巡逻机器人”介绍博客 演示视频链接&#xff1a; 基于树莓派的安保巡逻机器人_音游…

nn.RNN解析

以下是RNN的计算公式,t时刻的隐藏状态H(t)等于前一时刻隐藏状态H(t-1)乘以参数矩阵&#xff0c;再加t时刻的输入x(t)乘以参数矩阵&#xff0c;最后再通过激活函数&#xff0c;等到t时刻隐藏状态。 下图是输出input和初始化的隐藏状态&#xff0c;当参数batch_first True时候&…

Unity网络框架对比 Mirror|FishNet|NGO

在Unity中制作非单机项目常用的免费网络框架&#xff0c;这里选取了三款比较火的网络框架&#xff0c;Mirror、FishNet和Netcode for GameObject(NGO)。 比较了最常用的免费网络解决方案。可能还有值得探索的付费选项。您需要对此进行自己的研究。数据表格更新日志截止到&#…

【C++】深度剖析 scanf 函数:原理、应用与优化

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;scanf 函数的基本原理&#x1f4af;基本用法示例常见占位符示例 &#x1f4af;使用 scanf 时的注意事项&#x1f4af;引入 cstdio 头文件&#x1f4af;scanf 与 cin 的对比…

YOLOv1 (You Only Look Once)

YOLO (You Only Look Once) 是一种经典的目标检测算法&#xff0c;旨在通过一个统一的卷积神经网络&#xff08;CNN&#xff09;进行目标检测&#xff0c;最大化检测速度并保持较高的精度。YOLO 在目标检测领域产生了巨大的影响&#xff0c;并且经过了多个版本的迭代。下面是 Y…

【Verilog】实验二 数据选择器的设计与vivado集成开发环境

目录 一、实验目的 二、实验环境 三、实验任务 四、实验原理 五、实验步骤 top.v mux2_1.v 一、实验目的 1. 掌握数据选择器的工作原理和逻辑功能。 2. 熟悉vivado集成开发环境。 3. 熟悉vivado中进行开发设计的流程。 二、实验环境 1. 装有vivado的计算机。 2. Sw…

【CSS in Depth 2 精译_063】10.2 深入理解 CSS 容器查询中的容器

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 【第十章 CSS 容器查询】 ✔️ 10.1 容器查询的一个简单示例 10.1.1 容器尺寸查询的用法 10.2 深入理解容器 ✔️ 10.2.1 容器的类型 ✔️10.2.2 容器的名称 ✔️10.2.3 容器与模块化 CSS ✔️ 10.3…