首页 > 编程语言 >c++ day 13

c++ day 13

时间:2023-07-20 22:33:54浏览次数:42  
标签:std 容器 13 myVector 迭代 auto 元素 c++ day

今天来认识c++里面的迭代器

C++迭代器(Iterator)是一种用于遍历容器(如数组、向量、链表等)中元素的抽象概念。它允许你通过简单的接口在容器中移动,并访问容器中的元素,而无需了解底层数据结构的细节。迭代器提供了一种统一的方式来访问不同类型容器的元素,使得代码更加灵活和可复用。

在C++中,标准库(STL)提供了许多不同类型的迭代器,每种容器都有对应的迭代器。以下是一些常见的STL容器迭代器:

  1. begin()end()

    • begin():返回指向容器第一个元素的迭代器。
    • end():返回指向容器最后一个元素后面的虚拟元素的迭代器,也称为尾后迭代器。
  2. 单向迭代器(Forward Iterator):

    • 仅允许向前遍历容器中的元素。
    • 适用容器:std::forward_list(单向链表)。
  3. 双向迭代器(Bidirectional Iterator):

    • 允许向前和向后遍历容器中的元素。
    • 适用容器:std::list(双向链表)。
  4. 随机访问迭代器(Random Access Iterator):

    • 允许以常数时间访问容器中的任意元素。
    • 支持+-操作,可以跳跃性地访问元素。
    • 适用容器:std::vectorstd::deque 和普通数组等。

使用迭代器遍历容器的通用方式是通过循环,如下所示:

#include <iostream>
#include <vector>

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

    // 使用迭代器遍历 vector
    for (std::vector<int>::iterator it = myVector.begin(); it != myVector.end(); ++it) {
        std::cout << *it << " "; // 输出当前元素值
    }

    return 0;
}

在C++11中引入了更便捷的迭代器访问方式,使用auto关键字可以自动推导迭代器类型,如下所示:

#include <iostream>
#include <vector>

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

    // 使用auto关键字简化迭代器类型声明
    for (auto it = myVector.begin(); it != myVector.end(); ++it) {
        std::cout << *it << " "; // 输出当前元素值
    }

    return 0;
}

除了使用++来移动迭代器外,还可以使用其他运算符来进行定位和遍历。例如,--用于向后移动双向迭代器,+=-=用于在随机访问迭代器中跳跃性地移动。既然提到c++的特性auto了 那我今天就来复习复习auto的有关概念

写在了另一个博客里面了(32条消息) c++里面的auto类型_开摆就摆的博客-CSDN博客

 

标签:std,容器,13,myVector,迭代,auto,元素,c++,day
From: https://www.cnblogs.com/jszs0013/p/17569872.html

相关文章

  • week4 day5
    方法也可以抽象 具有抽象方法的类必须是抽象类 抽像的方法必须实现在继承树结构下的第一个具体类必须实现出所有的抽象方法复习一下方法重载:名称相同但是参数不同:1返回类型可以不同2不能只改变返回类型3可以更改存取权限publicintaddnums(inta,intb)puibicdoub......
  • 洛谷 P9139 [THUPC 2023 初赛] - 喵了个喵 II
    考虑如果每个数恰好出现两次,那么容易得出一个序列合法当且仅当将每个数两次出现位置看作一个区间\([l_i,r_i]\)的两个端点,那么这些区间两两之间不存在包含关系。考虑每个数出现四次的情况,我们钦定两次为\(i\),两次为\(i+n\),这样可以转化为\(2n\)的情况,而容易发现只有\(1122......
  • C++Const变量的存储位置
    const变量/对象的存储位置const局部变量const局部基础变量和自定义变量都存储在栈上structdiy_class{inta;intb;diy_class(inta,intb):a(a),b(b){}};intmain(){intb=1;//这个肯定在栈上constinta=10;//比较ab两个变......
  • C++架构师 课程目录
    C++架构师课程目录实现指南规划流程在实现"C++架构师课程目录"之前,我们需要先规划整个流程。以下是实现该功能的步骤:步骤描述1.创建课程目录类创建一个C++类来表示课程目录,并定义相关的成员变量和方法。2.添加课程实现向课程目录中添加课程的功能。3.删除课......
  • Python基础day49
    overflow溢出属性值描述visible默认值。内容不会被修剪,会呈现在元素框之外hidden内容会被修剪,并且其余内容是不可见的scroll内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容auto如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容inherit规定......
  • 1307:高精度乘法
    1307:【例1.3】高精度乘法时间限制:1000ms      内存限制:65536KB【题目描述】输入两个高精度正整数M和N(M和N均小于100位)。求这两个高精度数的积。【输入】输入两个高精度正整数M和N。【输出】求这两个高精度数的积。【输入样例】363【输出样例】......
  • C++ 模板编程技术解析
    一、函数模板函数模板实现通用函数,根据传递类型进行编译时实参推导:template<typenameT>Tadd(Ta,Tb){returna+b;}intmain(){intx=1,y=2;doublem=1.5,n=2.5;intz=add(x,y);doublep=add(m,n);return0;}这里te......
  • CF1132G Greedy Subsequences
    简单题。\(i\)向\(i\)后第一个\(j\),\(a_j\)比\(a_i\)大的点连边,不难发现最后形成了一棵森林,并且一个点的父亲\(\text{fa}_i>i\)。题目变成了取\([l,r]\)中的点为起点,向祖先方向走去并且终点编号\(\ler\)的最长链长度。考虑离线,维护从每个点开始的最长链长度\(f_i......
  • CF718E Matvey's Birthday
    不难发现答案\(\le15\),极限的情况大概就是\(aabbcc\cdotsgghh\),此时跳一步和走一步等效。这启示我们固定点\(i\),统计\(d(i,j)=D,j<i\)的\(j\)的个数,拆成\(i-j\le15\)的贡献和\(i-j>15\)的贡献。为了方便,以下称从\(i\)到\(i+1\)或\(i-1\)为「走」,在相同颜色......
  • Day3
    计算机语言发展史机器语言二进制汇编语言指令代替二进制高级语言面向过程:C语言——雕版印刷面向对象:C++,JAVA——活字印刷C:贴近硬件,操作系统、编译器、数据库、网络系统,指针和内存管理C++:兼容C,面向对象,图形领域、游戏JAVA可移植性-虚拟机高可用、高性能、高并发JavaSE......