2017-10-09 313 views
-2

我有一個存儲內部列表的頂部列表。我正在使用標準模板庫列表模板。打印列表的列表C++ STL列表

我正在嘗試打印內部列表的值。 頂部列表是「L」,內部列表是「I」。

void ListofLists::dump() 
{ 
    list<list<IntObj>>::iterator itr; 
    for (itr = L.begin(); itr != L.end(); itr++) 
    { 
     list<IntObj>::iterator it; 
     for (it = I.begin(); it != I.end(); it++) 
     { 
      cout << *it << " "; 
     } 
     cout << endl << "End" << endl; 
    } 
} 

我的IDE不喜歡行cout << *it << " ";,我真的不知道如何同時具有程序做什麼,我希望它做的,這是打印列表中的數據進行更改。 它紅色強調了「< <「運營商和說「不操作「< <‘匹配這些操作數。’

有人可以幫助我,爲什麼?我看了,並不能真正找到我要找的東西。我沒有正確理解某件事。我知道它正在將數據正確地添加到數據結構中,因爲我的IDE使我能夠查看我的本地人。

感謝任何人的幫助!意義重大。

+4

它試圖打印一個'IntObj'你有沒有添加到代碼來做到這一點? –

+1

你說你有一個存儲列表的列表,但這不是你所擁有的列表。您有兩個不相關的列表,您出於某種原因嘗試使用嵌套循環輸出。另外,請澄清「我的IDE不喜歡」並創建[mcve]謝謝。 – Rakete1111

+0

我不喜歡菠菜,你的IDE不喜歡你的代碼行。這就是我們都有我們的怪癖。 –

回答

0

嘗試使用:

list<IntObj>::const_iterator i; 

,而不是你使用的是一個以避免編譯錯誤。

0

內循環沒有意義。

如果你想使用迭代器則函數可以像

void ListofLists::dump() /* const */ 
{ 
    for (list<list<IntObj>>::iterator itr = L.begin(); itr != L.end(); itr++) 
    { 
     for (list<IntObj>::iterator it = itr->begin(); it != itr->end(); it++) 
     { 
      cout << *it << " "; 
     } 
     cout << endl << "End" << endl; 
    } 
} 

被定義然而,它會更簡單,以使用基於範圍的for循環。例如

void ListofLists::dump() /* const */ 
{ 
    for (const auto &inner_list : L) 
    { 
     for (const auto &item : inner_list) 
     { 
      cout << item << " "; 
     } 
     cout << endl << "End" << endl; 
    } 
} 

考慮到,你必須定義operator <<該類IntObj帳戶。 它的聲明應該看起來像

std::ostream & operator <<(std::ostream &, const IntObj &); 
+0

我可以在IntObj類之外爲IntObj定義ostream運算符嗎?我無法編輯IntObj文件。謝謝弗拉德。 –

+0

@AliciaSabatino你可以在類中定義它,在這種情況下,將使用ADL查找。如果運營商直接訪問該類別的私人數據成員,則必須將該運營商聲明爲朋友。 –

+0

好的。所以說這個值存儲在IntObj中的m_data中......我會在重載函數中寫入cout << m_data嗎? –