指针列表 c++

Pointer list c++

本文关键字:c++ 列表 指针      更新时间:2023-10-16

下面的代码:

#include <iostream>
#include <list>
class A
{
    public: 
    void printHello(){std::cout << "hello";}
};
int main(int argc, char *argv)
{
    std::list<A*> lista;
    lista.push_back(new A());
    for(std::list<A*>::iterator it=lista.begin();it!=lista.end();++it)
    {
        //how to get to printHello method?
        //it doesn't work
        it->printHello();       
    }   
    return 0;
}

此代码不起作用。我的问题是如何通过迭代器获得方法"printHello"?谢谢。

你想要

(*it)->printHello();

因为*it返回存储的指针A*,只有这样您才能应用 -> .

只需更改以下行

it->printHello(); 

(*it)->printHello(); 

运算符*() 提供对容器所包含数据的访问权限,在您的情况下,这些数据是一个指针。当不在容器中使用指针时,仅使用 operator->() 也可以。

取消

引用it会给你指向 A 的指针,然后你需要访问方法或数据成员。

所以使用:

(*it)->printHello();

让我扩展一下丹尼尔的答案。

当您在变量前面粘贴星号时,它称为"取消引用"。 以这种方式使用,星号是"取消引用运算符"。 说得菜鸟的话(我不知道你对什么程度的理解),*pMyPointer表现得好像是pMyPointer 指向的对象。 如果它是指向指针的指针,则结果只是指针。

例如,在指针上调用方法时,使用 Into 运算符->

这两者通常做同样的事情:

pMyPointer->MyFunction();

(*pMyPointer).MyFunction();

对于C++迭代器,将覆盖取消引用运算符以返回存储在其位置的对象。 在这种情况下,存储在其位置的内容是一个指针,因此您仍然必须使用->,除非您在其中插入另一个取消引用运算符。