这只是一个简单的介绍。在C++中,迭代器是“东西”,您至少可以在上面编写解引用运算符*it
,增量运算符++it
,对于更高级的双向迭代器,递减--it
,最后但并非最不重要的,对于随机访问迭代器,我们需要运算符索引it[]
以及可能的加法和减法。
在C++中,这样的“事物”是具有相应运算符重载的类型的对象,或者是简单的指针。
std::vector<>
是一个包装连续数组的容器类,因此指针作为迭代器是有意义的。在网络上,在一些文献中,你可以发现vector.begin()
被用作指针。
使用指针的基本原理是更少的开销,更高的性能,特别是当优化编译器检测到迭代并执行它的事情(向量指令和其他东西)时。使用迭代器可能会使编译器更难优化。
了解了这一点,我的问题是,为什么现代的STL实现,比如说MSVC++ 2013或Mingw4.7中的libstdc++,使用一个特殊的类来实现向量迭代器?
发布于 2015-12-25 05:24:15
我通过取消引用并立即再次引用迭代器绕过了这个讨厌的障碍。它看起来很可笑,但它满足了MSVC..。
class Thing {
. . .
};
void handleThing(Thing* thing) {
// do stuff
}
vector<Thing> vec;
// put some elements into vec now
for (auto it = vec.begin(); it != vec.end(); ++it)
// handleThing(it); // this doesn't work, would have been elegant ..
handleThing(&*it); // this DOES work
https://stackoverflow.com/questions/32654108
复制相似问题