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

Конструкторы двусторонней очереди

Синтаксис:

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

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

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

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

   deque<int> dq( 5, 42 );

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

   // создаем двустороннюю очередь из случайных чисел
   cout << "первоначальная двусторонняя очередь: ";
   deque<int> dq;
   for( int i = 0; i < 10; i++ ) {
     int num = static_cast<int>(rand() % 10);
     cout << num << " ";
     dq.push_back( num );
   }
   cout << endl;
 
   // находим первый четный элемент dq
   deque<int>::iterator iter1 = dq.begin();
   while( iter1 != dq.end() && *iter1 % 2 != 0 ) ++iter1;
 
   // находим последний четный элемент dq
   deque<int>::iterator iter2 = dq.end();
   do {
     --iter2;
   } while( iter2 != dq.begin() && *iter2 % 2 != 0 );
 
   cout << "первый четный элемент: " << *iter1 << ", последний четный элемент: " << *iter2 << endl;
 
   cout << "новая двусторонняя очередь: ";
   deque<int> dq2( iter1, iter2 );
   for( size_t i = 0; i < dq2.size(); i++ ) {
     cout << dq2[i] << " ";
   }
   cout << endl;

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

   первоначальная двусторонняя очередь: 1 9 7 9 2 7 2 1 9 8
   первый четный элемент: 2, последний четный элемент: 8
   новая двусторонняя очередь: 2 7 2 1 9

Кроме контейнеров и итераторов, STL также работает с указателями и массивами. Пример:

  // создаем двустороннюю очередь из массива
  const int ARR_SIZE = 4;
  int vals[ARR_SIZE] = { 13, 26, 5, 979 };
  deque<int> dq( vals, vals + sizeof(vals)/sizeof(int) );
 
  cout << "dq is: ";
  for( size_t i = 0; i < dq.size(); ++i ) cout << dq[i] << " ";
  cout << '\n';

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