Выбрать главу

list<char>::iterator р = lst.begin();

while(p != lst.end()) {

 cout << *p;

 p++;

}

Здесь итератор p инициализируется таким образом, чтобы он указывал на начало списка. При выполнении очередного прохода цикла итератор р инкрементируется, чтобы указывать на следующий элемент списка. Этот цикл завершается, когда итератор р указывает на конец списка. Применение подобных циклов — обычная практика при использовании библиотеки STL. Например, аналогичный цикл мы применили для отображения содержимого вектора в предыдущем разделе.

Поскольку списки являются двунаправленными, заполнение их элементами можно производить с обоих концов. Например, при выполнении следующей программы создается два списка, причем элементы одного из них расположены в порядке, обратном по отношению к другому.

/* Элементы можно помещать в список как с начала, так и с конца.

*/

#include <iostream>

#include <list>

using namespace std;

int main()

{

 list<char> lst;

 list<char> revlst;

 int i;

 for(i=0; i<10; i++ ) lst.push_back('A'+i);

 cout << "Размер списка lst = " << lst.size() << endl;

 cout << "Исходное содержимое списка: ";

 list<char>::iterator p;

 /* Удаляем элементы из списка lst и помещаем их в список revlst в обратном порядке. */

 while(!lst.empty()) {

  р = lst.begin();

  cout << *р;

  revlst.push_front(*р);

  lst.pop_front();

 }

 cout << endl << endl;

 cout << "Размер списка revlst = ";

 cout << revlst.size() << endl;

 cout << "Реверсированное содержимое списка: ";

 p = revlst.begin();

 while(p != revlst.end()) {

  cout << *p;

  p++;

 }

 return 0;

}

Эта программа генерирует такие результаты.

Размер списка lst = 10

Исходное содержимое списка: ABCDEFGHIJ

Размер списка revlst = 10

Реверсированное содержимое списка: JIHGFEDCBA

В этой программе список реверсируется путем удаления элементов с начала списка lst и занесения их в начало списка revlst.

Сортировка списка

Список можно отсортировать с помощью функции-члена sort(). При выполнении следующей программы создается список случайно выбранных целых чисел, который затем упорядочивается по возрастанию.

// Сортировка списка.

#include <iostream>

#include <list>

#include <cstdlib>

using namespace std;

int main()

{

 list<int> lst;

 int i;

 // Создание списка случайно выбранных целых чисел.

 for(i=0; i<10; i++ )lst.push_back(rand() );

 cout << "Исходное содержимое списка:\n";

 list<int>::iterator p = lst.begin();

 while(p != lst.end()) {

  cout << *p << " ";

  p++;

 }

 cout << endl << endl;

 // Сортировка списка.

 lst.sort();

 cout << "Отсортированное содержимое списка:\n";

 p = lst.begin();

 while(p != lst.end()) {

  cout << *p << " ";

  p++;