用C ++打印对象列表

时间:2012-11-20 13:18:34

标签: c++ list class iterator

我想知道是否有人可以帮我解决打印自定义类列表(第一次使用容器)。

目前我有一个变量声明为:

std::list<Item> inventory;

在一个名为player的类中。

现在我在类(播放器)中创建了一个名为void printInventory();的函数。

所以我的问题是如何打印列表中的内容。

我的Item类包含3个变量;

std::string name; 
int damage;
int value;

我还有一个函数来打印这些变量void itemDetails();

非常感谢任何帮助。

编辑:

我知道已经解决了我的问题,感谢提供的答案,这就是我所做的:

重载了项目类中的输出操作符:

    ostream& operator<<(ostream& os, const Item& item)
    {
            if (item.getTypeInt() == 0)
            {
                    os << "Name: " << item.getName() << endl
                    << "Type: " << item.getTypeString() << endl
                    << "Damage: " << item.getDamage()<< endl
                    << "Value: " << item.getValue() << endl;
            }
            else
            {
            os << "Name: " << item.getName() << endl
            << "Type: " << item.getTypeString() << endl
            << "HP: " << item.getHP()<< endl
            << "Value: " << item.getValue() << endl;
    }

    return os;
    }

然后我使用了其中一个答案,但修改了它,因此它没有声明另一个变量:

    void Player::printInventory()
    {   
        for(std::list<Item>::iterator it = inventory.begin(); it!= inventory.end(); ++it)
        {
                cout << *it;
        }

        cout <<"Inventroy Printed!!"<<endl;
    }

5 个答案:

答案 0 :(得分:3)

您应该为std::ostream& operator<<Item重载player,这样您就可以将数据写入除stdout之外的流。这是一个例子:

std::ostream& ooprator<<(std::ostream& os, const Item& item)
{
  return os << "Item {" << item.name << " " << item.damage << " " << item.value << "}";
}

这允许你做

Item i;
std::cout << i << "\n";

然后,为player实现类似的运算符,循环遍历列表并打印每个项目。

std::ostream& ooprator<<(std::ostream& os, const player& p)
  for (const auto& i : p.inventory) os << i << " "
  return os;
}

答案 1 :(得分:1)

std::for_each一起查看std::mem_funThe MSDN has a nice example。或者,您可以随时推出自己的循环,直接调用成员函数。

我手上没有编译器,但是这样的事情应该可以解决问题:

std::for_each(inventory.begin(), inventory.end(), std::mem_fun<Item>(&Item::printInventory));

答案 2 :(得分:1)

您已在inventory中找到了一个项目列表。迭代它并调用itemDetails

void printInventory()
{
  for(std::list<Item>::iterator it = inventory.begin(); it!= inventory.end(); ++it)
  {
    Item item = *it;
    item.itemDetails();
  }
}

这将完成这项工作。

答案 3 :(得分:0)

这是一个简单的for循环

for (std::list<Item>::iterator i = inventory.begin(); i != inventory.end(); ++i)
    i->itemDetails();

还有其他方法,但我就是这样做的。

itemDetails对你的方法来说不是一个很好的名字。也许printDetails

答案 4 :(得分:0)

您可以重载运算符<<,以便您能够通过标准输出输出项目。您可以找到一些示例here