Синтаксис:
#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';
Все конструкторы выполняются за линейное время, кроме первого, который выполняется за константное время.