stl_iterator.h迭代器

六、迭代器:

6.1、概念:

  6.1.1、iterater和容器其实是分开的。

  6.1.2、非const的iter的是可以修改的、而const的iter是不可修改的,除此之外所有的东西都是一样的。
      两个的设计逻辑上是两个不同的iter,但是又支持互相转换。

  6.1.3、iterator中的拷贝构造是默认的拷贝构造,进行的是浅拷贝,因为我们需要对容器中的元素进行操作。

6.2、分类:

  6.2.1、输入迭代器(InputIterator) 只读

    1、只能够读取(支持 val = *iter(读), 不支持 *iter = val(写))

    2、支持 -> (间接访问)、 ++(自加)。

    3、对比只支持 == 和 != 。

  6.2.2、输出迭代器(OutputIterator) 只写

    1、支持 *iter = val(iter里面元素的深浅拷贝问题)

    2、无间接访问(不能读)、支持 ++ 。

    3、不支持对比操作。

  6.2.3、前向迭代器(ForwardIterator)

    1、单向遍历,

    2、支持 ++、不支持 --、支持输入&输出迭代器功能。

    3、对比只支持 == 和 != 。

  6.2.4、双向迭代器(BidirectionalIterator)

    1、双向遍历

    2、支持++、--、支持输入&输出迭代器功能

    3、对比只支持 == 和 != 。

  6.2.5、随机迭代器(RandomAccessIterator)

    1、支持:++、--、+、-、+=、-=。

    2、比较支持:==、!=、<=、<、>、<=。(这里及以上提到的比较说的是迭代器本身的比较,并不是迭代器指向值得比较)

    3、作用于同一块空间(比如:数组),而以上的是一些不连续的内存空间(无对比意义),所以存在<=、<、>、<=。这些操作符重载。

时间: 2024-10-12 11:59:36

stl_iterator.h迭代器的相关文章

《STL源码剖析》---stl_iterator.h阅读笔记

STL设计的中心思想是将容器(container)和算法(algorithm)分开,迭代器是容器(container)和算法(algorithm)之间的桥梁. 迭代器可以如下定义:提供一种方法,能够依序寻访某个容器内的所有元素,而又无需暴露该容器的内部表达方式. 在阅读代码之前,要先了解一个新概念:Traits编程技法 template <class T> struct MyIter { typedef T value_type //内嵌型别声明 T *ptr; MyIter(T *p = 0

stl_iterator.h

stl_iterator.h // Filename: stl_iterator.h // Comment By: 凝霜 // E-mail: [email protected] // Blog: http://blog.csdn.net/mdl13412 /* * * Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this softwar

STL源码剖析—迭代器与traits编程方法

STL的中心思想就是将算法和容器分开,彼此独立设计,最后再以粘合在一起,算法和容器的泛型化,并不是很难,C++的class templates和function templates可以达成目标,但是粘合在一起就是迭代器的事情. 这么一说迭代器就是为了粘合算法和容器的,如果单独设计迭代器,那么这个迭代器就必须知道某个特定容器的内部数据,会暴露太多的信息,这样就规定每一种STL容器都提供有专属迭代器. 迭代器所指对象的型别,称为该迭代器的value_type.所谓value_type,是指迭代器所指

stl_algobase.h

stl_algobase.h // Filename: stl_algobase.h // Comment By: 凝霜 // E-mail: [email protected] // Blog: http://blog.csdn.net/mdl13412 // 这个文件中定义的都是一些最常用的算法, 我仅仅给出一个思路, // 不进行详尽讲解, 具体算法请参考算法书籍, 推荐<算法导论> // 另外, 对于基础薄弱的, 推荐<大话数据结构>, 此书我读了一下 // 试读章节, 适

《STL源码剖析》---stl_list.h阅读笔记

STL中链表list是一个常用的容器.list在内存中是不连续的双向链表,且是环形的.要了解链表细节是如何操作的话,阅读STL关于链表的代码是最好的方法. G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_list.h 完整列表 /* * * Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this

STL源码剖析——基本算法stl_algobase.h

前言 在STL中,算法是经常被使用的,算法在整个STL中起到非常重要的作用.本节介绍的是一些基本算法,包含equal,fill,fill_n,iter_swap,lexicographical_compare,max,min,mismatch,swap,copy,copy_backward,copy_n.其中一个比较重要的算法就是copy,针对copy的剖析在源码中可以看到详细的注解.本文剖析的源码出自SGL STL中的<stl_algobase.h>文件. 基本算法剖析 #ifndef __

《STL源码剖析》---stl_algobase.h阅读笔记

STL标准中没有区分基本算法或复杂算法,单SGI把常用的一些算法定义在<stl_algobase.h>只中,其他算法定义在<stl_algo.h>中. stl_algobase.h中的算法,比较值得学习的是copy(),它"无所不用其极"的改善效率.copy的目的是复制一段元素到指定区间,复制操作最容易想到赋值操作符=,但是有的赋值操作符=是trivial的,可以直接拷贝.关于赋值操作符=是不是trivial的,可以参考"Memberwise copy

stl_slist.h

stl_slist.h // Filename: stl_slist.h // Comment By: 凝霜 // E-mail: [email protected] // Blog: http://blog.csdn.net/mdl13412 /* * Copyright (c) 1997 * Silicon Graphics Computer Systems, Inc. * * Permission to use, copy, modify, distribute and sell this

STL源代码剖析——基本算法stl_algobase.h

前言 在STL中.算法是常常被使用的,算法在整个STL中起到很关键的数据.本节介绍的是一些基本算法,包括equal.fill.fill_n,iter_swap.lexicographical_compare.max,min.mismatch,swap,copy,copy_backward.copy_n.当中一个比較重要的算法就是copy.针对copy的剖析在源代码中能够看到具体的注解. 本文剖析的源代码出自SGL STL中的<stl_algobase.h>文件. 基本算法剖析 #ifndef