繁体   English   中英

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

[英]Vector and Iterators, print out value instead of memory address

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中的所有信息,但是我获得了它的内存地址,我已经使用了“* iter”作为解除引用程序,我做错了什么? 很抱歉提到我在Monster class getname和gethealth中也有2个函数。 返回健康和名称;

由于您将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() ,它在各种迭代器中都有效。

尝试

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

或者您可以在Monster类中重载'<<'运算符

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM