指针是双向迭代器

pointers are bi directional iterators?

本文关键字:迭代器 指针      更新时间:2023-10-16

我偶然发现了我完全困惑的东西。

std::reverse()将双向迭代器作为参数作为函数,但是当我将指针传递到函数时,它似乎可以正常工作并实际上反向字符串。

void reverseFour(char* str) {
    reverse(str, str + strlen(str));
}
int main {
    char *str = "hello";
    str += '/0';
    reverseFour(str);
}

那么,我的问题是,这怎么可能?双向迭代器不是指针,对吗?

实际上,指针是一种随机访问器。这甚至比双向学位符甚至更好,因为任何需要BidirectionalIterator的算法也将接受RandomAccessIterator,包括指针。

这是非常有意的,而且非常有用。

当然确实存在其他类型的迭代器,尤其是某些专门用于迭代器的类型,仅此而已(例如,您会从std::setstd::map中获得这些类型(。但是Iterator的概念是C 故意保持一般性的。