2011-04-13 62 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循环打印出该列表,而第二个打印到后从后到前。