指针列表 c++
Pointer list c++
下面的代码:
#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++迭代器,将覆盖取消引用运算符以返回存储在其位置的对象。 在这种情况下,存储在其位置的内容是一个指针,因此您仍然必须使用->
,除非您在其中插入另一个取消引用运算符。
相关文章:
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++如何通过用户输入删除列表元素
- 读取文件的最后一行并输入到链接列表时出错
- 复制列表初始化的隐式转换的等级是多少
- LNK2038、MSVS2017 MAGMA的原因列表
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 没有为自己的结构调用列表推回方法
- 使用简单类型列表实现的指数编译时间.为什么
- 一对向量构造函数:初始值设定项列表与显式构造
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 通过for循环使用用户输入填充列表
- C++:如何使函数只返回作为列表一部分的字符串
- 概念中的cv限定符需要表达式参数列表
- 下面是我为检测链接列表中的循环而制作的代码
- 建议在运行时将带有类实例的列表从c++导入qml
- 如何维护资源管理器项目视图中当前可见的项目列表
- 在卡萨布兰卡形成编码参数的列表
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题