gpt4 book ai didi

c++ - vector 和迭代器,打印出值而不是内存地址

转载 作者:行者123 更新时间:2023-11-30 02:38:13 25 4
gpt4 key购买 nike

int main(){

vector<Monster*> Monsters;
vector<Monster*>::iterator iter;

Monsters.push_back(new Monster("Slim", 100));
Monsters.push_back(new Monster("Archer", 200));
Monsters.push_back(new Monster("Solider", 300));
Monsters.push_back(new Monster("Tank", 400));
Monsters.push_back(new Monster("Skeleton",500 ));

for (iter = Monsters.begin(); iter < Monsters.end(); iter++){
cout << *iter << endl;
}


system("pause");
return 0;
}

大家好,所以我创建了一个名为 Monster 的类,它有一个允许 2 个变量的构造函数,一个字符串和一个 int(怪物名称和怪物健康),现在我想创建 5 个具有不同名称和健康的怪物,我把它们放在一个 vector 中并存储它,但是现在我想使用一个迭代器来尝试获取我存储在该 vector 中的所有信息,但是我得到了它的内存地址,我已经使用了一个“*iter”作为一个解引用器,我做错了什么?抱歉必须提到我在 Monster 类 getname 和 gethealth 中也有 2 个函数。返回健康和名字;

最佳答案

由于您将 MOnster 指针作为 vector 的类型,因此您使用了以下语法 cout << (*iter)->name << endl;取消引用 Monster 类的元素。示例如下:

class Monster{
public:
std::string name;
int age;
Monster( string s, int k): name(s),age(k)
{
}
};

int main(){

vector<Monster*> Monsters;
vector<Monster*>::iterator iter;

Monsters.push_back(new Monster("Slim", 100));
Monsters.push_back(new Monster("Archer", 200));
Monsters.push_back(new Monster("Solider", 300));
Monsters.push_back(new Monster("Tank", 400));
Monsters.push_back(new Monster("Skeleton",500 ));

for (iter = Monsters.begin(); iter != Monsters.end(); ++iter){
cout << (*iter)->name << endl;
}
}

其他一些好的做法:

  1. 总是对迭代器进行预增量

  2. 作为 iter != Monsters.end() 结束容器检查, 它在所有类型的迭代器中都有效。

关于c++ - vector 和迭代器,打印出值而不是内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31016682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com