这是我考试的一个问题,答案是所有指针都是迭代器,但并非所有迭代器都是指针。为什么会这样?
在如下声明中:
int *p = new int(4);
如何将p视为迭代器?
答案 0 :(得分:10)
“Iterator”是一个抽象的概念,描述了一个类型必须支持某些特定语义的特定操作集。
指针是迭代器,因为它们符合概念iterator(甚至更强,random access iterator),例如operator++
移动到下一个元素,operator *
移动到底层元素。
在您的特定示例中,您将获得带有
的标准迭代器范围[p, p+1)
可以在标准算法中使用,例如任何迭代器对。 (它可能不是特别有用,但它仍然有效。)以上适用于所有“有效”指针,即指向某个对象的指针。
然而,相反的含义是错误的:例如,考虑std::list<T>::iterator
。那仍然是一个迭代器,但它不能是指针,因为它没有operator[]
。