c++下迭代器总结

 更新时间:2021年12月22日 16:15:37   作者:CSSDCC  
大家好,本篇文章主要讲的是c++下迭代器总结,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览

1. 迭代器介绍

本章并不研究不同类型的迭代器,只总结常见迭代器的使用和误区。

定义:迭代器(iterator)有时又称光标(cursor),是程序设计的软件设计模式,可在容器对象(container,例如链表或数组)上遍历的接口,设计人员无需关心容器对象的内存分配的实现细节。

背景:指针可以用来遍历存储空间连续的数据结构,但是对于非连续存储的数据结构,就需要一个行为类似于指针的类,来对非连续数据结构进行遍历。正如定义里标红所说,迭代器可以遍历非连续的数据结构。

在C++中,我们更倾向于使用迭代器而不是使用下标操作,因为标准库为每一种标准容器(如vector)定义了一种迭代器类型,而只有少数容器(如vector)支持下标操作访问容器元素。

2. 初始化

每种容器都定义了自己的迭代器类型,可以使用auto自动声明迭代器的类型,也可以显示的将迭代器类型写出来:

//只有顺序容器(不包括array)的构造函数才接受大小参数
vector<int> vec(num, val);
vector<int>::iterator it = vec.begin();
//auto it = vec.begin();

3. 常用操作

下面表格列出了迭代器的常用操作:

*iter 解引用,返回迭代器指向的元素的引用
iter->member 等效于(*iter).member
++iter, iter++ iter + 1,指向容器的下一个元素
–iter, iter– 同上
iter1 == iter2 比较两个迭代器是否相等
iter1 != iter2

在C++定义的容器类型中,只有vector,string和queue容器提供迭代器算术运算和除!=和==之外的关系运算:

iter + n, iter - n 迭代器+或-一个常数,必须指向容器内或尾后元素(end())
iter1 += iter2 同上
iter1 -= iter2 同上
iter1 - iter2 获得两个迭代器之间的距离
>, >=, <, <= 元素靠后的迭代器大于靠前的迭代器

注意:

迭代器并不是所有都可以进行加减常数。 能进行算数运算的迭代器只有随机访问迭代器。要求容器元素存储在连续空间内;即vector、string、deque的迭代器是有加减法的;但是list、forward_list、map、set的迭代器是没有加减法的,它们仅支持++iter、–iter这些操作。 it++和++it的区别

在STL中的容器使用迭代器进行遍历时,it++与++it的效果是相同的,遍历的次数也是相同的,但是在STL中效率却不同:

++it返回的是引用;it++返回的是临时对象;–it同理。

原因:it++每次都要返回一个无用的临时对象,所以每一次遍历,你都进行了一次创建并销毁对象的操作。(leetcode小本本记好了!)

总结

到此这篇关于c++下迭代器总结的文章就介绍到这了,更多相关c++ 迭代器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • c++11 符号修饰与函数签名、函数指针、匿名函数、仿函数、std::function与std::bind

    c++11 符号修饰与函数签名、函数指针、匿名函数、仿函数、std::function与std::bind

    这篇文章主要介绍了c++11 符号修饰与函数签名、函数指针、匿名函数、仿函数、std::function与std::bind,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Qt利用tablewidget模拟手指实现滑动

    Qt利用tablewidget模拟手指实现滑动

    这篇文章主要为大家详细介绍了Qt如何利用tablewidget模拟手指实现滑动效果,文中的示例代码讲解详细,对我们学习Qt有一定的帮助,需要的可以参考一下
    2023-01-01
  • C语言实现获取文件大小与创建修改时间

    C语言实现获取文件大小与创建修改时间

    这篇文章主要为大家详细介绍了如何通过C语言实现获取文件大小、创建时间与修改时间,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • c++基础学习之如何区分引用和指针

    c++基础学习之如何区分引用和指针

    C语言中只有指针,C++加入了引用,能够起到跟指针类似的作用,下面这篇文章主要给大家介绍了关于c++基础学习之区分引用和指针的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • C语言 数据存储方式知识点详解

    C语言 数据存储方式知识点详解

    在本篇文章里小编给大家整理的是关于C语言 数据存储方式知识点详解,有需要的朋友们可以学习参考下。
    2020-02-02
  • c++实现一个简易的网络缓冲区的实践

    c++实现一个简易的网络缓冲区的实践

    这篇文章主要介绍了c++实现一个简易的网络缓冲区的实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 深入理解C/C++中的写时拷贝

    深入理解C/C++中的写时拷贝

    这篇文章主要给大家介绍了C/C++中写时拷贝的相关资料,所谓写时拷贝也就是拖延版的深拷贝,下面文章中介绍的非常清楚,需要的朋友可以参考学习,下面来一起看看吧。
    2017-03-03
  • C语言数据结构堆的基本操作实现

    C语言数据结构堆的基本操作实现

    这篇文章主要为大家介绍了C语言数据结构堆的基本操作实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-11-11
  • C语言实现两个递减数列中寻找某一个数

    C语言实现两个递减数列中寻找某一个数

    这篇文章主要介绍了C语言实现两个递减数列中寻找某一个数,是一类经典的数组操作算法,需要的朋友可以参考下
    2014-09-09
  • 详解C语言中二分查找的运用技巧

    详解C语言中二分查找的运用技巧

    本文主要介绍了二分查找在实际中的应用,通过分析几个应用二分查找的实例,总结下能使用二分查找算法的一些共同点,感兴趣的可以了解一下
    2022-03-03

最新评论