C++,STL 迭代器简介:概念、分类、操作

devtools/2025/2/11 19:39:26/

请添加图片描述

文章目录

  • 引言
  • 一、迭代器的基本概念
    • 1.1 什么是迭代器?
    • 1.2 迭代器的意义
  • 二、迭代器的分类
    • 2.1 示意图:迭代器能力层级
    • 2.2 示例:不同迭代器的操作
  • 三、迭代器的常用操作
    • 3.1 基本操作
    • 3.2 随机访问迭代器专用操作
    • 示例代码:随机访问迭代器
  • 四、迭代器的通用用法
    • 4.1 遍历容器
    • 4.2 配合算法使用
  • 五、注意事项
  • 六、总结


引言

在 C++ 标准模板库(STL)中,迭代器(Iterator) 是连接容器(Container)与算法(Algorithm)的核心桥梁。它提供了一种统一的方式访问容器中的元素,使得算法可以独立于具体容器实现。本文将深入解析迭代器的核心概念、分类及常见操作,并通过示例代码和示意图帮助读者快速掌握其用法。


一、迭代器的基本概念

1.1 什么是迭代器?

迭代器是一种行为类似指针的对象,用于遍历容器中的元素。它支持以下核心操作:

  • 访问元素(解引用 *

  • 移动位置(递增 ++、递减 --

  • 比较位置==!=

#include <vector>
#include <iostream>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 声明迭代器并指向容器首元素std::vector<int>::iterator it = vec.begin();// 遍历并输出元素while (it != vec.end()) {std::cout << *it << " ";  // 解引用迭代器++it;                     // 移动到下一位置}// 输出:1 2 3 4 5return 0;
}

1.2 迭代器的意义

  • 泛型编程:算法通过迭代器操作容器,无需关心容器类型。

  • 统一接口:所有支持迭代器的容器(如 vectorlist


http://www.ppmy.cn/devtools/158012.html

相关文章

leetcode_80删除有序数组中的重复项 II

1. 题意 删除有序数组中的重复元素&#xff0c;同一元素不能超过两次。 2. 题解 leetcode26. 删除有序数组中的重复项的升级版本&#xff0c;只需要考虑 n u m s [ l e n − 2 ] ≠ n u m s [ j ] nums[len -2] \ne nums[j] nums[len−2]nums[j]即可&#xff0c; l e n le…

SQL入门到精通 理论+实战 -- 在 MySQL 中学习SQL语言

目录 一、环境准备 1、MySQL 8.0 和 Navicat 下载安装 2、准备好的表和数据文件&#xff1a; 二、SQL语言简述 1、数据库基础概念 2、什么是SQL 3、SQL的分类 4、SQL通用语法 三、DDL&#xff08;Data Definition Language&#xff09;&#xff1a;数据定义语言 1、操…

Fastadmin根据链接参数显示不同列表格

前端有不同的角色&#xff0c;我在后台设置了不同的菜单管理账号&#xff0c;如下图&#xff1a; 不同的账号表格中要展示不同的内容&#xff0c;要显示不同的列。 解决办法是在定义表格前获取url中的group_id参数&#xff0c;根据不同参数定义不同的表格。 代码如下&#xf…

51单片机07 串口通信

串口是一种应用十分广泛的通讯接口&#xff0c;串口成本低、容易使用、通信线路简单&#xff0c;可实现两个设备的互相通信。单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信。51单片机内部自带UART&#xff08;Universal Asynchronous Recei…

防御综合实验

需求一 配置vlan [SW2]int g 0/0/2 [SW2-GigabitEthernet0/0/2]port link-type access [SW2-GigabitEthernet0/0/2]port default vlan 10 [SW2-GigabitEthernet0/0/2]int g0/0/3 [SW2-GigabitEthernet0/0/3]port link-type access [SW2-GigabitEthernet0/0/3]port default vl…

打包工具选择:Vite 还是 Webpack

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

设计模式详解(享元模式)

一、引言 设计模式是一种用于解决在特定上下文中经常出现的问题的优秀解决方案。它们为开发人员提供了一种通用的设计语言&#xff0c;有助于创建灵活且可维护的代码。享元设计模式&#xff08;Flyweight Pattern&#xff09;是结构型模式之一&#xff0c;它通过共享对象来减少…

MHTML文件如何在前端页面展示

MHTML文件如何在前端页面展示 需求背景&#xff1a; 目前在给证券公司做项目&#xff0c;但是在使用新系统的过程中&#xff0c;甲方还希望之前之前系统的历史记录可以看到。 最初制定的计划是项目组里面做数据的把原系统页面爬取下来&#xff0c;转成图片&#xff0c;直接给…