Други­ми словами, STL может быть полезна даже в программах, которые исполь­зуют обычные массивы, а не типичные контейнеры STL, о чем рассказано в следующем разделе.

Как показано в приведенной ниже таблице, векторы, двусторонние оче­реди и списки поддерживают различные наборы операций.

Операция______________________ Функция__________ 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 ";


<< назад вперед >>