Как показано в приведенной ниже таблице, векторы, двусторонние очереди и списки поддерживают различные наборы операций.
Операция______________________ Функция__________ vector deque list
Вставить в конце push_back ■/ У У
Удалить в конце pqpback У У У
Вставить в начале push_front . у у
Удалить в начале pop_front . s s
Вставить в любом месте insert {/) {/) S
Удалить в любом месте erase (/) (/) S
Отсортировать (см. раздел 1.4) sort (алгоритм) S S
Галочка в скобках {/) означает, что функции insert и erase, хотя определены для векторов и двусторонних очередей, применительно к этим контейнерам выполняются гораздо медленнее, чем для списков. Говорят, что их выполнение занимает линейное время для векторов и двусторонних очередей, а это означает: время их выполнения пропорционально длине последовательности, хранящейся в контейнере. В противоположность этому все операции, помеченные галочкой S (без скобок), выполняются за постоянное время, то есть время, необходимое для их выполнения, не зависит от длины последовательности.
До сих пор мы видели только, как используется функция pushjback. Следующая программа показывает, как использовать все функции для вставки и удаления, перечисленные в вышеприведенной таблице (pushback, pop_back, push_front, pop_Jront, insert и erase').
II insdel.cpp: Вставка и удаление элементов из списка, iinclude <iostream> iinclude <list> using namespace std;
void showlist(const char *str, const list<int> &L) { list<int>::const_iterator i;
cout « str « endl « " " ;
for (i=L.begin(); i != L.end(); ++i) cout « *i « n ";
<< назад вперед >>