vector<Object*>::iterator iter;
for(iter = vec.begin(); iter != vec.end(); ++iter)
{
(*iter)->methodA();
}我知道(iter)->methodA();等价于((*iter)).methodA();
但我不明白为什么我们需要一秒钟*。不应该*iter指向iter的值(指针值或对象实例的地址),它是一个地址(iter指向自身的地址)。指针是非常混乱的。
发布于 2014-03-18 20:52:55
(*iter)获取迭代器的内容。由于vector<Object*>的内容本身就是指针,所以需要->来获取methodA。
发布于 2014-03-18 20:51:25
*iter给了你一个Object*。这是一个指针,因此您需要使用->或进一步的*来通过它调用方法。它和
Object* p = *iter;
p->methodA();
(*p).methodA();至于你的问题标题,(*iter).methodA()不应该编译。
发布于 2014-03-18 21:00:19
Iterator是一种抽象。这是一个概念,任何类似迭代器的行为都是迭代器。这就是为什么您可以在这里声明指针是迭代器。
爱尔兰人
对于类型为Iterator的It,除了其他要求外,对于此类类型的对象i,必须满足以下条件:
Expression Return Precondition
*i reference i is dereferenceable [2]
++i It& 所以假设迭代器
vector<Object*>::iterator iter;然后:
(*iter) -> methodA();
^^^^^^^ ^
&(Object*) dereference pointer and call methodA on the object
pointed to by pointer
(*iter) . methodA();
^^^^^^^ ^
&(Object*) call methodA on the pointer? error: request for member ‘methodA’ in
‘it.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator*
[with _Iterator = Object**, _Container = std::vector<Object*,
std::allocator<Object*> >]()’, which is of non-class type ‘Object*’
make: *** [main.o] Error 1https://stackoverflow.com/questions/22490736
复制相似问题