Перевод этой страницы?:

Конструкторы списка

Синтаксис:

    #include <list>
    list();
    list( const list& c );
    list( size_type num, const T& val = T() );
    list( input_iterator start, input_iterator end );
    ~list();

Конструктор по умолчанию не принимает аргументов, он создает новый экземпляр списка.

Второй конструктор - конструктор копирования по умолчанию, использующийся для создания нового списка как копии другого.

Третий конструктор создает список с местом под num объектов. Если val объявлена, то каждый из этих объектов будет инициализирован ее значением; в противном случае объекты получат значение конструктора по умолчанию типа T. Например, следующий код создает список, состоящий из пяти копий целого числа 42:

   list <int> l1( 5, 42 );

Последний конструктор создает список, состоящий из элементов между start и end. Пример:

   // создаем список из случайных чисел
   cout << "первоначальный список: ";
   list<int> l;
   for( int i = 0; i < 20; i++ ) {
     int num = (int) rand() % 10;
     cout << num << " ";
     l.push_back( num );
   }
   cout << endl;
 
    // удаляем 5 и 7
   list<int>::iterator iter1 = l.begin();
   while( iter1 != l.end() ) {
     list<int>::iterator thisone = iter1;
     iter1++;
     if ( *thisone == 5 || *thisone == 7 ) {
        cout << "удалили " << *thisone << endl;
        l.erase( thisone );
     }
   }
 
    // находим первый четный элемент l
   list<int>::iterator iter2 = l.begin();
   while( iter2 != l.end() && *iter2 % 2 != 0 ) {
     iter2++;
   }
 
   // находим последний четный элемент l
   list<int>::iterator iter3 = l.end();
   do {
     iter3--;
   } while( iter3 != l.begin() && *iter3 % 2 != 0 );
 
   cout << "первый четный элемент: " << *iter2 << ", последний четный элемент: " << *iter3 << endl;
 
   cout << "новый список: ";
   list<int> l2( iter2, iter3 );
   list<int>::iterator iter4 = l2.begin();
   while( iter4 != l2.end() ) {
     cout << *iter4 << " ";
     iter4++;
   }
   cout << endl;

После запуска код выводит:

   первоначальный список: 7 9 3 8 0 2 4 8 3 9 0 5 2 2 7 3 7 9 0 2
   удалили 7
   удалили 5
   удалили 7
   удалили 7
   первый четный элемент: 8, последний четный элемент: 2
   новый список: 8 0 2 4 8 3 9 0 2 2 3 9 0

Все конструкторы выполняются за линейное время, кроме первого, который выполняется за константное время.

Деструктор списка по умолчанию последовательно вызывает деструктор для каждого объекта списка.