2012-11-20 67 views
1

我想知道是否有人能夠幫助我打印自定義類的列表(首次使用容器)。在C++中打印對象列表

目前,我有一個變量聲明爲:

std::list<Item> inventory;

一類叫做播放器中。

現在我創建了一個名爲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; 
    } 
+2

[你有什麼嘗試?](http://whathaveyoutried.com) –

回答

3

您應該重載std::ostream& operator<<Itemplayer,這將允許您將數據寫入除標準輸出以外的流。這裏有一個例子:

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使用自動和範圍 –

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)); 
0

這是一個簡單的for循環

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

還有其他的方法,但這是我如何'做到這一點。

itemDetails對您的方法來說不是一個很好的名字。也許printDetails

0

您可以重載運算符<<,以便您可以通過標準輸出輸出項目。你可以找到一些例子here

+0

'重疊',我喜歡它!但技術上正確的術語是過載。 – john

+0

Ooooops!我在腦海中有其他的東西......編輯,謝謝! –

1

您已經有了inventory中的項目列表。遍歷它並致電itemDetails

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

這將完成這項工作。