首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++ std::vector<>::iterator不是指针,为什么?

C++ std::vector<>::iterator不是指针,为什么?
EN

Stack Overflow用户
提问于 2015-09-18 22:08:32
回答 1查看 5.1K关注 0票数 26

这只是一个简单的介绍。在C++中,迭代器是“东西”,您至少可以在上面编写解引用运算符*it,增量运算符++it,对于更高级的双向迭代器,递减--it,最后但并非最不重要的,对于随机访问迭代器,我们需要运算符索引it[]以及可能的加法和减法。

在C++中,这样的“事物”是具有相应运算符重载的类型的对象,或者是简单的指针。

std::vector<>是一个包装连续数组的容器类,因此指针作为迭代器是有意义的。在网络上,在一些文献中,你可以发现vector.begin()被用作指针。

使用指针的基本原理是更少的开销,更高的性能,特别是当优化编译器检测到迭代并执行它的事情(向量指令和其他东西)时。使用迭代器可能会使编译器更难优化。

了解了这一点,我的问题是,为什么现代的STL实现,比如说MSVC++ 2013或Mingw4.7中的libstdc++,使用一个特殊的类来实现向量迭代器?

EN

回答 1

Stack Overflow用户

发布于 2015-12-25 05:24:15

我通过取消引用并立即再次引用迭代器绕过了这个讨厌的障碍。它看起来很可笑,但它满足了MSVC..。

代码语言:javascript
复制
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
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32654108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档