所有指针都被认为是迭代器吗?

Bob*_*Bob 4 c++

这是我考试的一个问题,答案是所有指针都是迭代器,但并非所有迭代器都是指针.为什么会这样?

在如下声明中:

int *p = new int(4);
Run Code Online (Sandbox Code Playgroud)

如何将p视为迭代器?

Bau*_*gen 10

"Iterator"是一些抽象概念,描述了一种类型必须支持某些特定语义的操作.

指针是迭代器,因为它们满足概念迭代器(以及更强大的随机访问迭代器),例如operator++移动到下一个元素并operator *访问底层元素.

在您的特定示例中,您将获得标准迭代器范围

[p, p+1)
Run Code Online (Sandbox Code Playgroud)

例如,可以在标准算法中使用它,就像任何迭代器对一样.(它可能不是特别有用,但它仍然有效.)以上适用于所有"有效"指针,即指向某个对象的指针.

然而,相反的含义是错误的:例如,考虑一下std::list<T>::iterator.那仍然是一个迭代器,但它不能是指针,因为它没有operator[].