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个不同名称和生命的怪物,我将它们放在一个向量中并存储它,但是现在我想使用Iterator来尝试获取我存储在该Vector中的所有信息,但是我获得了它的内存地址,我已经使用了一个&#34; * ITER&#34;作为一个解除引用者,我做错了什么?很抱歉提到我在Monster class getname和gethealth中也有2个函数。返回健康和名称;
答案 0 :(得分:3)
由于您将MOnster指针保持为向量的类型,因此您使用以下synax 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;
}
}
很少有其他好的做法:
总是在迭代器上预先递增
结束检查容器为iter != Monsters.end()
,它在各种迭代器中都有效。
答案 1 :(得分:0)
尝试
cout << (*iter) ->getname;
cout << (*iter) ->gethealth;
或者你可以重载&#39;&lt;&lt;&lt;&lt;&#你的怪物类中的操作符