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

时间:2016-12-17 03:03:27

标签: c++

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

在如下声明中:

int *p = new int(4);

如何将p视为迭代器?

1 个答案:

答案 0 :(得分:10)

“Iterator”是一个抽象的概念,描述了一个类型必须支持某些特定语义的特定操作集。

指针是迭代器,因为它们符合概念iterator(甚至更强,random access iterator),例如operator++移动到下一个元素,operator *移动到底层元素。

在您的特定示例中,您将获得带有

的标准迭代器范围
[p, p+1)

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

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