指针是双向迭代器?

str*_*013 1 c++ pointers iterator

我偶然发现了让我完全困惑的事情.

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

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

int main {
    char *str = "hello";
    str += '/0';
    reverseFour(str);
}
Run Code Online (Sandbox Code Playgroud)

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

Lig*_*ica 7

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

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

还有呢,当然,存在其他类型的迭代器,特别是一些类型的致力于成为只迭代器而已(你会从得到这些std::setstd::map,例如).但是,a的概念Iterator是C++故意保持相当普遍的东西.

  • @Slava:整数不是一种迭代器.别傻了. (2认同)
  • @Slava:现在你正在构成一个稻草人的论点,因为这根本不是我所说的. (2认同)
  • @Slava随机访问迭代器在你可以用它做更多操作的意义上更好(它的限制性较小). (2认同)
  • 我比继续这个愚蠢的讨论更好,我知道的很多. (2认同)