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)
所以,我的问题是,这怎么可能?双向迭代器不是指针,对吧?
事实上,指针是一种RandomAccessIterator.这甚至比BidirectionalIterator更好,因为任何需要a的算法BidirectionalIterator也会接受a RandomAccessIterator,包括指针.
这是非常慎重的,非常有用的.
还有呢,当然,存在其他类型的迭代器,特别是一些类型的致力于成为只迭代器而已(你会从得到这些std::set和std::map,例如).但是,a的概念Iterator是C++故意保持相当普遍的东西.