C++ (*iter)->method()和(*iter.method()之间有什么区别?

C++ (*iter)->method()和(*iter.method()之间有什么区别?,c++,pointers,C++,Pointers,我知道iter->methodA;相当于*iter.methodA 但我不明白为什么我们需要一秒钟*。iter不应该指向iter对象实例的值指针值或地址,这是指向自身地址的地址iter。指针非常混乱。*iter给你一个对象*。这是一个指针,因此需要使用->或进一步的*来通过它调用方法。这和 vector<Object*>::iterator iter; for(iter = vec.begin(); iter != vec.end(); ++iter) { (*iter)-

我知道iter->methodA;相当于*iter.methodA

但我不明白为什么我们需要一秒钟*。iter不应该指向iter对象实例的值指针值或地址,这是指向自身地址的地址iter。指针非常混乱。

*iter给你一个对象*。这是一个指针,因此需要使用->或进一步的*来通过它调用方法。这和

vector<Object*>::iterator iter;

for(iter = vec.begin(); iter != vec.end(); ++iter)
{
    (*iter)->methodA(); 
}
至于你的问题标题,*iter.methodA不应该编译。

*iter给你一个对象*。这是一个指针,因此需要使用->或进一步的*来通过它调用方法。这和

vector<Object*>::iterator iter;

for(iter = vec.begin(); iter != vec.end(); ++iter)
{
    (*iter)->methodA(); 
}

至于你的问题标题,*iter.methodA不应该编译。

*iter获取迭代器的内容。由于vector的内容本身就是指针,所以需要->来获取methodA。

*iter获取迭代器的内容。由于vector的内容本身就是指针,所以需要->来获取methodA。

迭代器是一种抽象。这是一个概念,任何行为类似于迭代器的东西都是迭代器。这就是为什么您可以在这里使用一条语句,说明指针是迭代器

对于类型为迭代器的类型,除其他要求外,此类类型的对象i还必须满足以下条件:

Object* p = *iter;
p->methodA();
(*p).methodA();
假设迭代器

Expression  Return    Precondition
*i        reference   i is dereferenceable [2]
++i           It&   
然后:


迭代器是一种抽象。这是一个概念,任何行为类似于迭代器的东西都是迭代器。这就是为什么您可以在这里使用一条语句,说明指针是迭代器

对于类型为迭代器的类型,除其他要求外,此类类型的对象i还必须满足以下条件:

Object* p = *iter;
p->methodA();
(*p).methodA();
假设迭代器

Expression  Return    Precondition
*i        reference   i is dereferenceable [2]
++i           It&   
然后:


一个会编译,另一个不会,因为*iter不计算对象的引用;相当于*iter.methodA,而不是*iter->methodA;必须等效于**iter.methodAA指针不是对象一个代表所有数据成员的大小一定的实例!一个会编译,另一个不会,因为*iter不计算对象的引用;相当于*iter.methodA,而不是*iter->methodA;必须等效于**iter.methodAA指针不是对象一个代表所有数据成员的大小一定的实例!这让人困惑,因为在你的例子中,你只使用了一次,这是因为iter本身就是一个指针还是什么?@user3435009 iter是一个迭代器。它有点像一个指针,但它不是指针。它有反引用操作符->和*使它看起来像一个指针。但请注意,指针是一个迭代器。这很令人困惑,因为在您的示例中,您只使用了一次,这是因为iter本身就是一个指针还是什么?@user3435009 iter是一个迭代器。它有点像一个指针,但它不是指针。它有反引用操作符->和*使它看起来像一个指针。请注意,指针是一个迭代器。因此,由于指针本身是无用的,我们需要指针指向的对象,所以我们使用第二个*?明白了。不,指针不是没用的,但既然你想要一个对象,你就去引用它pointer@user3435009查找一些使用迭代器处理不包含指针的向量的示例。*itr是获得迭代器本身指向的内容的方式。一旦你有了这些,你就必须适当地处理它。在您的例子中,您从迭代器中得到一个指针,因此->。因此,因为指针本身是无用的,我们需要指针指向的对象,所以我们使用第二个*?明白了。不,指针不是没用的,但既然你想要一个对象,你就去引用它pointer@user3435009查找一些使用迭代器处理不包含指针的向量的示例。*itr是获得迭代器本身指向的内容的方式。一旦你有了这些,你就必须适当地处理它。在您的例子中,从迭代器中得到一个指针,因此得到->。