Tri*_*ner 51
迭代器是指针的推广.
迭代器(取决于变体)必须实现*和++
所以指针是一个迭代器.但不一定相反.
如果你想迭代一个复杂的结构(一个树,一个图......),迭代器将不仅仅是一个指针,并且不会对ram中的某个实际位置进行任何引用.
迭代器是重载某些运算符的对象,因此使用看起来像是指针.这属于给定迭代器类别的功能.随机访问迭代器看起来完全像指针,其他类型的迭代器不提供某些操作(例如list<X>::iterator,哪些是双向的,+=在许多其他需要随机访问的操作符中没有操作符).
至于"晦涩的名字",使用普通指针作为迭代器并不是完全不可想象的:
template <class T>
class MyContainer
{
...
typedef T* iterator;
}
MyContainer<int>::iterator it; //the type is really int*
Run Code Online (Sandbox Code Playgroud)
迭代器只是一种提供迭代器所需接口的类型 - 这些对于不同类型的迭代器是不同的,并且在 C++ 标准的第 24.1 节(迭代器要求)中指定。
迭代器的实现方式取决于它们迭代的内容——对于向量,它们通常是指向数组的单个指针的包装器(无论如何在发布版本中),对于更复杂的容器,它们具有更复杂的实现。对于开放式范围,它们将包含用于生成元素的任何算法的状态。
请注意,指向数组中元素的指针满足随机访问迭代器的要求,因此在某种程度上它们是可以互换的。