Сторнирование содержимого std :: list - PullRequest
2 голосов
/ 13 апреля 2011
class Print 
   {  
   public:
       void PrintAll() {}
   private:
    std::list<int> mylist;
   };

Я вижу этот пример вопроса из книги по языку C ++.И я хочу напечатать внутренние элементы mylist.Как это сделать, если mylist нужно перевернуть, используя библиотеку C ++ STL и используя для вывода результата.

Большое спасибо!

Ответы [ 5 ]

12 голосов
/ 13 апреля 2011

std::list<>::reverse() * * 1004

Тем не менее, если вам нужно только напечатать list в обратном порядке, вы можете просто напечатать его, используя обратные итераторы list (полученные из std::list<>::rbegin() и std::list<>::rend()) вместо использования обычных итераторов list. E.g.:

// 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';
}
3 голосов
/ 13 апреля 2011

Вы можете использовать метод reverse() в вашем списке.

mylist.reverse();

перевернет содержимое вашего списка, а затем вы сможете распечатать его, используя итераторы.

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

Вы можете обернуть всю функциональность в свою собственную функцию-член.

0 голосов
/ 20 мая 2016

итератор просто указывает на текущий элемент в списке.Итак, если мы напишем цикл 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 печатает список спереди назад, а второй цикл печатает сзади-спереди.

0 голосов
/ 13 апреля 2011

Пример кода для list :: reverse

// 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 голосов
/ 13 апреля 2011

Вы также можете использовать обратные итераторы, предоставляемые контейнером eglrbegin () и l.rend (), которые будут перебирать список в обратном направлении.

...