我偶然发现了让我完全糊涂的事情。
std::reverse()
将双向迭代器作为函数的参数,但是当我将指针传递给函数时,它似乎工作正常并实际上反转了字符串。
void reverseFour(char* str) {
reverse(str, str + strlen(str));
}
int main {
char *str = "hello";
str += '/0';
reverseFour(str);
}
所以,我的问题是,这怎么可能?双向迭代器不是指针,对吗?
答案 0 :(得分:7)
事实上,指针是一种RandomAccessIterator。这甚至比BidirectionalIterator更好,因为任何需要BidirectionalIterator
的算法都会接受RandomAccessIterator
,包括指针。
这是非常慎重的,非常有用。
当然,存在其他类型的迭代器,特别是一些专用于迭代器的类型,而不是更多(您将从std::set
和std::map
获取这些迭代器,例)。但是Iterator
的概念是C ++故意保持相当普遍的东西。