简单介绍一下。在C++中,迭代器是"东西",你可以在其上写入至少解引用运算符 *it
,自增运算符 ++it
,对于更高级的双向迭代器,则需要自减运算符 --it
,最后但并非最不重要的是,对于随机访问迭代器,我们需要索引运算符 it[]
,以及可能的加法和减法。
在C++中,这样的"东西"是具有相应运算符重载的类型对象,或者是普通的简单指针。
std::vector<>
是一个容器类,它包装了一个连续的数组,因此使用指针作为迭代器是有意义的。在网络上以及某些文献中,您可以找到将 vector.begin()
用作指针的写法。
使用指针的理由是开销小,性能更高,特别是如果优化编译器检测到迭代并执行相关操作(如矢量指令等)。而使用迭代器可能会更难于编译器进行优化。
了解了这些,我的问题是为什么现代STL实现(比如MSVC++ 2013或Mingw 4.7中的libstdc++)会为 vector 迭代器使用特殊的类?