向量和迭代器,打印输出值而不是内存地址

时间:2015-06-24 02:36:23

标签: c++ vector iterator

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个函数。返回健康和名称;

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;
     }
}

很少有其他好的做法:

  1. 总是在迭代器上预先递增

  2. 结束检查容器为iter != Monsters.end(),它在各种迭代器中都有效。

答案 1 :(得分:0)

尝试

cout << (*iter) ->getname;
cout << (*iter) ->gethealth;

或者你可以重载&#39;&lt;&lt;&lt;&lt;&#你的怪物类中的操作符