首页 > 编程语言 >C++学习随笔——什么是迭代器

C++学习随笔——什么是迭代器

时间:2024-08-28 10:03:26浏览次数:12  
标签:容器 遍历 Iterator 迭代 元素 C++ vector 随笔

迭代器是 C++ 标准模板库 (STL) 中用于遍历容器元素的对象或概念。

它们提供了一种通用的方式来访问容器中的元素,而不需要了解容器的底层实现。

迭代器在设计上类似于指针,但功能更为强大和灵活。

 

1. 迭代器是什么?

迭代器 是一个抽象概念,它为容器(如 vectorlist 等)提供了一种统一的访问接口。通过迭代器,可以逐一访问容器中的每个元素,而不关心容器的具体实现细节。

迭代器的主要功能包括:

  • 访问元素:通过迭代器,可以访问当前元素。
  • 遍历容器:迭代器支持前进(++)、后退(--)操作,允许遍历容器中的元素。
  • 比较:迭代器支持比较操作(如 ==!=),用以判断是否到达容器的末尾。

迭代器的分类:

根据功能和适用场景,迭代器分为以下几种类型:

  • 输入迭代器(Input Iterator):只支持从容器读取元素,通常用于一次性遍历。
  • 输出迭代器(Output Iterator):只支持向容器写入元素,通常用于一次性遍历。
  • 前向迭代器(Forward Iterator):支持单向遍历,可以读取和写入元素。
  • 双向迭代器(Bidirectional Iterator):支持双向遍历,可以读取和写入元素。list 的迭代器属于这一类。
  • 随机访问迭代器(Random Access Iterator):支持在容器中任意位置进行访问,类似于指针。vector 的迭代器属于这一类。

使用迭代器的示例:

#include <iostream>
#include <vector>
#include <list>

int main() {
    // 使用 vector 的迭代器
    std::vector<int> myVector = {1, 2, 3, 4, 5};
    std::vector<int>::iterator itVec;
    for (itVec = myVector.begin(); itVec != myVector.end(); ++itVec) {
        std::cout << *itVec << " "; // 输出: 1 2 3 4 5
    }
    std::cout << std::endl;

    // 使用 list 的迭代器
    std::list<int> myList = {10, 20, 30, 40, 50};
    std::list<int>::iterator itList;
    for (itList = myList.begin(); itList != myList.end(); ++itList) {
        std::cout << *itList << " "; // 输出: 10 20 30 40 50
    }
    std::cout << std::endl;

    return 0;
}

 

标签:容器,遍历,Iterator,迭代,元素,C++,vector,随笔
From: https://www.cnblogs.com/kitanoki/p/18384036

相关文章

  • QT/C++中的GDAL多线程应用(读取):发生的问题以及解决方案
    1.引言在使用GDAL库对TIF文件进行切割和创建瓦片金字塔时,为了提高创建效率,不得不考虑使用多线程处理。然而,在实际实现过程中,我遇到了许多问题。通过不断的尝试和优化,最终找到了有效的解决方案。本文将详细记录这一过程中的问题和解决方法。2.初始多线程尝试与问题2.1......
  • VTK随笔七:VTK图像处理(图像基本操作)
    VTK图像基本操作一、图像信息的访问与修改1、利用vtkImageData的方法 vtkSmartPointer<vtkBMPReader>reader=vtkSmartPointer<vtkBMPReader>::New();reader->SetFileName("D:/data/lena.bmp");reader->Update();intdims[3];reader......
  • 南沙C++陈老师讲题:1078:求分数序列和
    ​【题目描述】【输入】输入有一行,包含一个正整数n(n≤30)n(n≤30)。【输出】输出有一行,包含一个浮点数,表示分数序列前nn项的和,精确到小数点后44位。【输入样例】2【输出样例】3.5000#include<iostream>#include<stdio.h>usingnamespacestd;intmain()......
  • 二叉树的层序遍历 C++
    给你二叉树的根节点 root ,返回其节点值的 层序遍历 。(即逐层地,从左到右访问所有节点)。示例1:输入:root=[3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]示例2:输入:root=[1]输出:[[1]]示例3:输入:root=[]输出:[]classSolution{public:vector<vect......
  • 根据二叉树创建字符串 C++
    给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。空节点使用一对空括号对 "()" 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。示例1:输入:root=[1,2,3,4]输出:"1......
  • C++智能指针
    1.为什么需要智能指针大家来看下面这段程序我们new了两个arraydoubleDivision(inta,intb){ //当b==0时抛出异常 if(b==0) { throw"Divisionbyzerocondition!"; } return(double)a/(double)b;}voidFunc(){ int*array1=newint[10]; int*......
  • 【python】基础之迭代器
    1.总览2.迭代器介绍2.1:迭代器是一个实现了迭代协议的对象,它可以让我们遍历一个容器中的所有元素,而不需要知道容器的内部结构,迭代器可以用于遍历列表,元祖,字典,集合等容器类型;2.2:迭代器的工作原理是通过实现两个方法:iter()和__next__()方法,iter()方法返回迭代器对象本身,next......
  • C++面向对象三大特性之一(封装)
    下面这篇文我来给大家分享C++面向对象三大特性之一(封装)。一、什么是封装?分装就是一个类中的私有成员,虽然类外不可以访问,但是我们提供一些公共的接口来间接让其他人访问到,例如一个人的名字我们起好之后就一般不会允许其他人改你的姓名,但是我们可以通过一些方式得到你的姓名......
  • C++/C区别
    C++/C差别typedef和using的差别,typedef可以用来定义一个类型,也可以用于定义别名。using还是做不到定义类型,但是可以用于别名。voidAadd(){/*code*/}voidBadd(){/*code*/}typedefvoid(*PFunc)();//定义一个函数指针类型PFuncfunc=Aadd;PFuncfu......
  • 链表简介c++
    定义:链表是一种数据结构,其中元素(也称为节点)不是连续存储的。每个节点包含数据部分和一个指向下一个节点的指针。类型:在C++中,有两种主要类型的链表:单链表(每个节点只有一个指针指向下一个节点)和双向链表(每个节点有两个指针,一个指向前一个节点,另一个指向后一个节点)。结构......