指针是双向迭代器?

时间:2018-02-27 21:42:12

标签: c++ pointers iterator

我偶然发现了让我完全糊涂的事情。

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

void reverseFour(char* str) {
    reverse(str, str + strlen(str));
}

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

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

1 个答案:

答案 0 :(得分:7)

事实上,指针是一种RandomAccessIterator。这甚至比BidirectionalIterator更好,因为任何需要BidirectionalIterator的算法都会接受RandomAccessIterator,包括指针。

这是非常慎重的,非常有用。

当然,存在其他类型的迭代器,特别是一些专用于迭代器的类型,而不是更多(您将从std::setstd::map获取这些迭代器,例)。但是Iterator的概念是C ++故意保持相当普遍的东西。