2017-06-19 81 views
1

我創建了一個具有消息向量的類,我需要重載ostream運算符,以便在新行上輸出索引和每條消息。我看過很多隻能輸出一條預定線的例子,但問題是我不知道我的矢量有多大。使用矢量重載ostream運算符

我正在尋找這樣的事情:

my_message.messages = {"line 1", "line 2", "line 3"}; 
cout<<my_message<<endl; 

輸出:

Message Contents: 
01: Line 1 
02: Line 2 
03: Line 3 
+0

請提供一個[mcve],什麼是'my_message'?並且,寫下你已經嘗試過的以及它失敗的原因 –

回答

-1

超載operator <<class MY_MESSAGES像下面。 然後在重載的運算符函數中迭代消息vector並打印單個消息。

std::ostream& operator <<(std::ostream& o, class MY_MESSAGES my_message) 
{ 
    int size = my_message.messages.size(); 

    o << Message Contents: << std::endl; 

    for(int i = 0;i < size; i++) 
    { 
     o << i+1 << my_message.messages[i] << std::endl; 
    } 
    return o; 
} 
0

std::vector有一個名爲size()方法,它可以返回此vector.So的大小,我們可以這樣寫:

class my_message 
{ 
    friend std::ostream &operator<<(std::ostream &os, my_message &c); 
    public: 
     my_message(std::vector<std::string> v) :messages(v) {} 
    private: 
     std::vector<std::string> messages; 
}; 

std::ostream &operator<<(std::ostream &os, my_message &c) 
{ 
    for(std::size_t index = 0; index < c.messages.size(); ++index) 
     os << index <<": " << c.messages[index] << std::endl; 
    return os; 
} 

如果my_message.messages是私有的,std::ostream &operator<<(std::ostream &, my_message)應該是my_message朋友會員。