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

이 예제는 C++ 언어 책에서 볼 수 있습니다. 그리고 내부 mylist 요소를 인쇄하고 싶습니다. mylist를 C++ STL 라이브러리를 사용하고 결과를 출력하는 데 사용하여 역순환해야하는 경우 어떻게 할 수 있습니까?std :: list의 내용 반전

대단히 감사합니다.

+0

Print_ll() –

답변

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"));' –

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 = 20 30 10 역상 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; 
    } 

뒤에서 앞으로 번째 인쇄하는 동안 앞뒤로리스트 루프 밖으로 인쇄에 제.