cout « endl; }

int main()

{  list<int> L;

int x;

cout « "Enter positive integers, followed by 0:\n";

while (cin » x, x != 0) L.push_back(x);

showlist("Initial list:", L);

L.push_front(123);

showlist("After inserting 123 at the beginning:", L); list<int>::iterator i = L.begin(),• L.insert(++i, 456); showlist(

"After inserting 456 at the second position:", L); i = L.endO ; L.insert(--i, 999); showlist(

"After inserting 999 just before the end:", L); i = L. begin О; х = *i; L.pop_front();

cout « "Deleted at the beginning: " « x « endl; showlist("After this deletion:", L); i = L.endO ; x = *--i; L.pop_back();

cout « "Deleted at the end: " « x « endl; showlist("After this deletion:", L); i = L.begin));

x = *++i; cout « "To be deleted: " « x « endl; L.erase(i); showlist("After this deletion (of second element):",

L); return 0; }

Функции для вставки и удаления здесь применяются к списку, посколь­ку это единственный контейнерный тип, для которого все эти функции определены и выполняются эффективно, как указывает вышеприведенная таблица. В следующем примере выполнения программы (и далее в этой книге) данные, вводимые с клавиатуры, подчеркнуты:

Enter positive integers, followed by 0: 10 20 30  0 Initial list:

10 20 30 After inserting 123 at the beginning:

123 10 20 30 After inserting 456 at the second position:

123 456 10 20 30 After inserting 999 just before the end:

123 456 10 20 999 30 Deleted at the beginning: 123 After this deletion:

456 10 20 999 30 Deleted at the end: 30 After this deletion:

456 10 20 999

То be deleted:   10

After this deletion   (of second element): 456  20   999

Употребление const в первых двух строчках функции showlist требует разъяснения:

void showlist(const char *str,   const  list<int> &L) {    list<int>::const_iterator i;

Добавление приставки const к параметрам типа указатель или ссылка, как это сделано выше, является хорошей практикой, если такие параметры не используются для модификации объектов, на которые они указывают. По­скольку функция showlist не модифицирует ни строку str, ни список L, от­сюда происходят два употребления слова const на первой из этих двух стро­чек. Из-за этого на второй строчке мы должны объявить переменную i типа const iterator, чтобы иметь возможность использовать ее вместе с L. Это похоже на применение модификатора const к указателям: если хотим при­своить вышеобъявленный параметр str указателю/), мы сможем сделать это, только использовав const при объявлении этого указателя:

const char *p;        //  const необходим,  поскольку str р = str;                       // типа const char *

Стирание подпоследовательности

Если [il, г'2) является действительным диапазоном для вектора v, мы мо­жем стереть подпоследовательность в v, заданную этим диапазоном, сле­дующим образом:

v.erase (il,   i2) ;

То же самое относится и к остальным контейнерам.


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