C++迭代器(Iterator)详解

迭代器(Iterator)的介绍

  1. 背景:  指针可以用来遍历存储空间连续的数据结构,但是对于存储空间费连续的,就需要寻找一个行为类似指针的类,来对非数组的数据结构进行遍历。
    定义:迭代器是一种检查容器内元素并遍历元素的数据类型。
    迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围
    迭代器(Iterator)是指针(pointer)的泛化,它允许程序员用相同的方式处理不同的数据结构(容器)。
    (1)迭代器类似于C语言里面的指针类型,它提供了对对象的间接访问。
    (2)指针是C语言中的知识点,迭代器是C++中的知识点。指针较灵活,迭代器功能较丰富。
    (3)迭代器提供一个对容器对象或者string对象的访问方法,并定义了容器范围

  2. 迭代器和指针的区别:
    容器和string有迭代器类型同时拥有返回迭代器的成员。如:容器有成员begin和end,其中begin成员复制返回指向第一个元素的迭代器,而end成员返回指向容器尾元素的下一个位置的迭代器,也就是说end指示的是一个不存在的元素,所以end返回的是尾后迭代器

  3. 容器迭代器的使用
    每种容器类型都定义了自己的迭代器类型,如vector:vector< int>:: iterator iter;//定义一个名为iter的变量,数据类型是由vector< int>定义的iterator 类型。简单说就是容器类定义了自己的iterator类型,用于访问容器内的元素。每个容器定义了一种名为iterator的类型,这种类型支持迭代器的各种行为
    常用迭代器类型如下:
    这里写图片描述
    如上图所示,迭代器类型主要支持两类,随机访问和双向访问。其中vector和deque支持随机访问,list,set,map等支持双向访问。
    1)随机访问:提供了对数组元素进行快速随机访问以及在序列尾部进行快速插入和删除操作。
    2)双向访问:插入和删除所花费的时间是固定的,与位置无关。

  4. 迭代器的操作
    1、所有迭代器:
    这里写图片描述
    2、双向迭代器:
    这里写图片描述
    3、输入迭代器:
    列表内容
    4、输出迭代器
    这里写图片描述
    5、随机迭代器
    这里写图片描述
  5. 使用方法
#include <iostream>
#include <list>
#include <algorithm>using namespace std;int main()
{list<int> list1;for (int k=0;k<10;k++){list1.push_back(k);}for (int k=0;k<10;k++){list1.insert(list1.end(), k);}list<int>::iterator list_iter1;for (list_iter1 = list1.begin();list_iter1 != list1.end();++list_iter1){cout << *list_iter1 << " ";}cout << endl;//findlist<int>::iterator list_iter2 = find(list1.begin(),list1.end(),2);cout << *list_iter2 << endl;system("pause");return 0;
}

 

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

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

相关文章

用键盘怎么直接打出小于等于和大于等于

≤&#xff1a;按住Alt&#xff0c;然后再按数字键盘41436≥&#xff1a;按住Alt&#xff0c;然后再按数字键盘41437

Java中的责任链设计模式

在本教程中&#xff0c;我们将学习如何在Java中实现责任链模式。 “责任链”设计模式涉及到拥有一系列负责处理请求的对象链。 当客户端发送请求时&#xff0c;第一个处理程序将尝试处理该请求。 如果可以处理&#xff0c;则请求处理在此结束。 但是&#xff0c;如果处理程序无…

C++ vector 遍历修改汇总

通过迭代器、下标操作符、范围for三种方式遍历vector内部元素以及不同遍历方式修改元素。 #include<iostream> #include<vector> using namespace std; int main() {vector<int> ivec;for(int i 0; i < 10; i)ivec.push_back(i);//遍历vector元素//1: 利…

C++11 for区间遍历:vector几种遍历方式

近来&#xff0c;基本上所有现代编程语言都有一种对一个区间写for循环的便捷方式。最终&#xff0c;C也有了相同的概念&#xff1b;你可以给循环提供一个容器&#xff0c;它帮你迭代。 example: #include <iostream> #include <vector> #include <map> usi…

指针基础及实例

指针基础 指针&#xff08;变量&#xff09;是C/C支持的一种变量。指针变量的值是一个地址&#xff0c;该地址是一个16进制的数。指针变量指向该地址所对应的变量。 指针声明 //*号表示指针变量。**号表示二级指针&#xff08;指向指针的指针&#xff09;&#xff0c;只有由它…

硒测试可实现有效的测试自动化

尽管移动应用程序的市场份额有大幅增长&#xff0c;但网络应用程序仍然以大量的用户群为主导。 在部署之前&#xff0c;企业正在快速关注Web应用程序的质量。 这是测试发挥重要作用的地方。 与某些可以自动化的功能测试不同&#xff0c;UI测试仍然主要是手动过程。 但是将测试自…

C++ map用法总结(整理)

1&#xff0c;map简介 map是STL的一个关联容器&#xff0c;它提供一对一的hash。 第一个可以称为关键字(key)&#xff0c;每个关键字只能在map中出现一次&#xff1b;第二个可能称为该关键字的值(value)&#xff1b; map以模板(泛型)方式实现&#xff0c;可以存储任意类型的…

InterruptedException和中断线程的解释

如果没有将InterruptedException检查为异常&#xff0c;则可能甚至没人会注意到它–实际上&#xff0c;这些年来可以防止出现几个错误。 但是由于必须对其进行处理&#xff0c;因此许多人不正确或不加考虑地处理它。 让我们以一个线程的简单示例为例&#xff0c;该线程定期进行…

pat 乙级 1020 月饼(C++实现)

题目 月饼是中国人在中秋佳节时吃的一种传统食品&#xff0c;不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量&#xff0c;请你计算可以获得的最大收益是多少。 注意&#xff1a;销售时允许取出一部分库存。样例给出的情形是这样的&…

Python的from和import用法

import使一个变量名引用整个模块对象&#xff0c;因此必须通过模块名称来得到该模块的属性,比如我们导入一个数学计算的模块 math&#xff1a; import mathprint math.pi #导出圆周率的值>>>3.14159265359我们导入math模块&#xff0c;在python模块学习中我们会知道&a…

带有Spring Cloud Config和JHipster的Java微服务

朋友不允许朋友写用户身份验证。 厌倦了管理自己的用户&#xff1f; 立即尝试Okta的API和Java SDK。 在几分钟之内即可对任何应用程序中的用户进行身份验证&#xff0c;管理和保护。 如今&#xff0c;使用Java和Spring Boot开发微服务架构非常流行。 它绝对是Java生态系统中最…

pat 乙级 1026 程序运行时间(C++)

题目 要获得一个 C 语言程序的运行时间&#xff0c;常用的方法是调用头文件 time.h&#xff0c;其中提供了 clock() 函数&#xff0c;可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间。这个时间单位是 clock tick&#xff0c;即“时钟打点”。同时还有一个常数 CLK_TC…

什么是命名空间 为什么C++需要使用命名空间

引言&#xff1a; 问题&#xff1a;学习过C&#xff0c;然后再学c的人可能会这么问&#xff0c;我#include<iostream>之后&#xff0c;不就是把头文件拉进来了吗&#xff0c;而cin cout等函数不就是iostream.h里面的函数吗&#xff0c;我使用cin cout时&#xff0c;编译器…

pat 乙级 1023 组个最小数(C++)

题目 给定数字 0-9 各若干个。你可以以任意顺序排列这些数字&#xff0c;但必须全部使用。目标是使得最后得到的数尽可能小&#xff08;注意 0 不能做首位&#xff09;。例如&#xff1a;给定两个 0&#xff0c;两个 1&#xff0c;三个 5&#xff0c;一个 8&#xff0c;我们得…

C++谷歌命名规范

1.文件命名规则 文件名全部小写&#xff0c;可以含下划线或连字符&#xff0c;按项目约定命名,且尽量保证文件名明确。比如&#xff1a;cmd_save_player_info_class.cc &#xff0c;my_use_full_class.cc 定义类的文件名一般是成对出现&#xff0c;如&#xff1a;foo_bar.h f…

pat 乙级 1028 人口普查(C++)

题目 某城镇进行人口普查&#xff0c;得到了全体居民的生日。现请你写个程序&#xff0c;找出镇上最年长和最年轻的人。 这里确保每个输入的日期都是合法的&#xff0c;但不一定是合理的——假设已知镇上没有超过 200 岁的老人&#xff0c;而今天是 2014 年 9 月 6 日&#xf…

c++ 为什么要按它们声明的顺序初始化成员变量?

我今天正在写一些代码&#xff0c;并得到一个奇怪的编译错误&#xff0c;这似乎是由初始化成员变量的顺序不同于他们声明的。 class Test {int a;int b;public:Test() : b(1), a(2) {} };int main() {Test test;return 0; } 然后&#xff0c;如果我编译它与-Werror -Wall&…

如何在Java中使用Lombok删除样板安装程序获取器

你好朋友&#xff0c; 一次又一次反对Java的观点之一是&#xff0c;我们必须写很多样板 我们简单的POJO类的setter和getter形式的代码&#xff0c;不必要地增加了 我们代码的长度。 为了解决这个问题&#xff0c;有一个名为Project Lombok的开源项目可以解决这个问题。 通过…

Python 列表list与数组array的区别

1. 列表list与数组array的定义&#xff1a; 列表是由一系列按特定顺序排列的元素组成&#xff0c;可以将任何东西加入列表中&#xff0c;其中的元素之间没有任何关系&#xff1b; Python中的列表(list)用于顺序存储结构。它可以方便、高效的的添加删除元素&#xff0c;并且列…

Dev-C++使用技巧1(亲测)(超详细)(安装过程、修改语言、新建项目、配置C++ 11、开启警告信息和调试信息)

前言 Dev-C是一款内存占用小&#xff0c;支持C/C&#xff0c;支持调试&#xff0c;可以一键编译、运行的IDE&#xff08;集成开发环境&#xff09;。 下载链接&#xff1a;Dev-C - Download 如果上面那个不行或者下载比较慢&#xff0c;可以点链接: Dev-Cpp 提取码: xaby 。 …