2011-04-13 65 views
2
class Print 
    { 
    public: 
     void PrintAll() {} 
    private: 
    std::list<int> mylist; 
    }; 

我從C++語言書中看到這個示例問題。 而我想打印內部mylist元素。 如果需要顛倒mylist,使用C++ STL庫並使用輸出結果,該怎麼辦?顛倒std :: list的內容

非常感謝!

+0

請添加PrintAll()的代碼 – 2011-04-13 06:32:35

回答

11

std::list<>::reverse()

這就是說,如果你只需要打印list在倒車時,你可以使用list的反向迭代器(由std::list<>::rbegin()std::list<>::rend()獲得)而不是使用list的正常迭代器只是打印出來。例如:

// given std::list<int> l; 
for (std::list<int>::const_reverse_iterator iter(l.rbegin()), iter_end(l.rend()); 
     iter != iter_end; 
     ++iter) 
{ 
    std::cout << *iter << '\n'; 
} 
+4

'std :: copy(l.rbegin(),l.rend(),std :: ostream_iterator (std :: cout,「\ n」));' – 2011-04-13 07:12:32

3

您可以在列表中使用reverse()方法。

mylist.reverse(); 

將顛倒你的列表的內容,然後你可以使用迭代器打印相同的內容。

list<int>::iterator it; 
cout << "mylist contains:"; 
for (it=mylist.begin(); it!=mylist.end(); ++it) 
    cout << " " << *it; 

您可以將所有功能包裝在自己的成員函數中。

0

您還可以使用容器提供的反向迭代器,例如, l.rbegin()和l.rend(),它們將向後遍歷列表。

0

碼例如用於一覽::反向

// list_reverse.cpp 
// compile with: /EHsc 
#include <list> 
#include <iostream> 

int main() 
{ 
    using namespace std; 
    list <int> c1; 
    list <int>::iterator c1_Iter; 

    c1.push_back(10); 
    c1.push_back(20); 
    c1.push_back(30); 

    cout << "c1 ="; 
    for (c1_Iter = c1.begin(); c1_Iter != c1.end(); c1_Iter++) 
     cout << " " << *c1_Iter; 
    cout << endl; 

    c1.reverse(); 
    cout << "Reversed c1 ="; 
    for (c1_Iter = c1.begin(); c1_Iter != c1.end(); c1_Iter++) 
     cout << " " << *c1_Iter; 
    cout << endl; 
} 

而輸出將是

C1 = 10 20 30 反相C1 = 30 20 10

0

迭代器簡單地點到列表中的當前元素。所以,如果我們編寫一個從頭到尾的for循環,我們可以反向打印列表。在下面給出的代碼:

#include <iostream> 
    #include <list> 

    using namespace std; 

    int main() 
    { 
     std::list<int> ii; 
     ii.push_back(1); 
     ii.push_back(2); 
     ii.push_back(3); 
     ii.push_back(4); 
     ii.push_back(5); 
     for (std::list<int>::iterator it = (ii.begin()); it != (ii.end()) ; ++it) 
     { 
      cout << (*it) << " "; 
     } 
     cout << endl; 
     for (std::list<int>::iterator it = (--ii.end()); it != (--ii.begin()) ; it--) 
     { 
      cout << (*it) << " "; 
     } 
     return 0; 
    } 

從前面的第一個for循環打印出該列表,而第二個打印到後從後到前。