所有的容器都有自己的迭代器,我用的时候不需要添加什么文件,但有三种迭代器一定要加
#include <iterator>头文件:流,插入,翻转。
有五种迭代器的种类:
Iterator Category Ability Providers
Input iterator Reads forward istream
Output iterator Writes forward ostream, inserter
Forward iterator Reads and writes forward
Bidirectional iterator Reads and writes forward and list, set, multisetmap,backwardmultimap
Random access iterator Reads and writes with random access vector, deque string, array
Input Iterator
注意:Input Iterator 只能向前读一次,因此,如果你赋值一个input iterator,并让原来的和拷贝的向前读,它们遍历的值有可能不一样。
它有以下的操作:
*iter
Provides read access to the
actual element
iter ->member Provides
read access to a member (if any) of the actual element
++iter
Steps forward (returns new position)
iter++ Steps
forward (returns old position)
Iter1 == iter2 Returns
whether two iterators are equal
Iter1 != iter2 Returns
whether two iterators are not equal
TYPE(iter) Copies
iterator (copy constructor)
我们应该在遍历时总是用++iter因为iter++会产生一个临时变量,影响效率。
Out Iterator
Output iterators 它只能向前遍历只写,因此你能赋一个新值only element-by-element ,你不能在同一个范围遍历两次,目的是为了写一个值into a "black hole“,因此,如果你在同一个位置写两次,不保证你能覆盖原来的值。
*iter = value Writes value to
where the iterator refers
++iter Steps
forward (returns new position)
iter++ Steps
forward (returns old position)
TYPE (iter) Copies
iterator (copy constructor)
通常迭代器的都能读或写。一个的纯的Out Iterator是写到 标准输出的迭代器。如果你有两个OutPut Iterator写到屏幕第二个自跟在第一个字后面而不是覆盖它。
Forward Iterators
它是拥有前两种迭代器的所有能力。
*iter Provides
access to the actual element
iter-> member Provides
access to a member of the actual element
++iter Steps
forward (returns new position)
iter++ Steps
forward (returns old position)
iter1 == iter2 Returns
whether two iterators are equal
iter1 != iter2 Returns
whether two iterators are not equal
TYPE() Creates
iterator (default constructor)
TYPE(iter) Copies
iterator (copy constructor)
iter1 = iter2 Assigns
an iterator
Bidirectional Iterators :
Bidirectional Iterators是在Forward Iterators增加了一些操作:
-- iter Steps
backward (returns new position)
iter-- Steps
backward (returns old position)
Random Access Iterators
它在Bidirectional Iterators的基础上增加了一些操作:
iter[n] Provides
access to the element that has index n
iter+=n Steps n elements
forward (or backward, if n is
negative)
iter-=n Steps n elements
backward (or forward, if n is
negative)
iter+n Returns
the iterator of the n th
next element
n+iter Returns
the iterator of the n th
next element
iter-n Returns
the iterator of the n th
previous element
iter1-iter2 Returns
the distance between iter1 and iter2
iter1<iter2 Returns
whether iter1 is
before iter2
iter1>iter2 Returns
whether iter1 is
after iter2
iter1<=iter2 Returns
whether iter1 is
not after iter2
iter1>=iter2 Returns
whether iter1 is
not before iter2
The following program demonstrates the special abilities of random
Vector 前置(++,- -)的错误:
coll.sort (++coll.begin(), coll.end());
这是错误的,因为Vector 的迭代器作用就是指针,不可以改变临时指针的值,而对于一个机构体或是一个类是可以的。我们通过引进一个变量来解决:
std::vector<int>::iterator beg = coll.begin();
coll.sort (++beg, coll.end());
#include <iterator>头文件:流,插入,翻转。
有五种迭代器的种类:
Input iterator Reads forward istream
Output iterator Writes forward ostream, inserter
Forward iterator Reads and writes forward
Bidirectional iterator Reads and writes forward and list, set, multisetmap,backwardmultimap
Random access iterator Reads and writes with random access vector, deque string, array
Input Iterator
注意:Input Iterator 只能向前读一次,因此,如果你赋值一个input iterator,并让原来的和拷贝的向前读,它们遍历的值有可能不一样。
它有以下的操作:
我们应该在遍历时总是用++iter因为iter++会产生一个临时变量,影响效率。
Out Iterator
Output iterators 它只能向前遍历只写,因此你能赋一个新值only element-by-element ,你不能在同一个范围遍历两次,目的是为了写一个值into a "black hole“,因此,如果你在同一个位置写两次,不保证你能覆盖原来的值。
通常迭代器的都能读或写。一个的纯的Out Iterator是写到 标准输出的迭代器。如果你有两个OutPut Iterator写到屏幕第二个自跟在第一个字后面而不是覆盖它。
Bidirectional Iterators是在Forward Iterators增加了一些操作:
The following program demonstrates the special abilities of random
Vector 前置(++,- -)的错误:
coll.sort (++coll.begin(), coll.end());
这是错误的,因为Vector
std::vector<int>::iterator beg = coll.begin();
coll.sort (++beg, coll.end());
本文详细介绍了C++中五种不同类型的迭代器:输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器。每种迭代器的特性和使用方式都进行了详细的说明,并给出了具体的示例。
3985

被折叠的 条评论
为什么被折叠?



