Скотт Мейерс - Эффективное использование STL

Здесь есть возможность читать онлайн «Скотт Мейерс - Эффективное использование STL» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: СПб., Год выпуска: 2002, ISBN: 2002, Издательство: Питер, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Эффективное использование STL: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Эффективное использование STL»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

В этой книге известный автор Скотт Мейерс раскрывает секреты настоящих мастеров, позволяющие добиться максимальной эффективности при работе с библиотекой STL.
Во многих книгах описываются возможности STL, но только в этой рассказано о том, как работать с этой библиотекой. Каждый из 50 советов книги подкреплен анализом и убедительными примерами, поэтому читатель не только узнает, как решать ту или иную задачу, но и когда следует выбирать то или иное решение — и почему именно такое.

Эффективное использование STL — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Эффективное использование STL», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

4. Элемент v[5]исключается, поэтому алгоритм игнорирует его и переходит к v[6]. При этом он продолжает помнить, что на месте v[4]остается «дыра», которую нужно заполнить.

5. Элемент v[6]сохраняется, поэтому алгоритм присваивает v[6]элементу v[4], вспоминает, что следующая «дыра» находится на месте v[5], и переходит к v[7].

6. Аналогичным образом анализируются элементы v[7], v[8]и v[9]. Значение v[7]присваивается элементу v[5], а значение v[8]присваивается элементу v[6]. Элемент v[9]игнорируется, поскольку находящееся в нем значение подлежит удалению.

7. Алгоритм возвращает итератор для элемента, следующего за последним «оставшимся». В данном примере это элемент v[7].

Перемещения элементов в векторе vвыглядят следующим образом:

Как объясняется в совете 33 факт перезаписи некоторых удаляемых значений имеет - фото 11

Как объясняется в совете 33, факт перезаписи некоторых удаляемых значений имеет важные последствия в том случае, если эти значения являются указателями. Но в контексте данного совета достаточно понимать, что removeне удаляет элементы из контейнера, поскольку в принципе не может этого сделать. Элементы могут удаляться лишь функциями контейнера, отсюда следует и главное правило настоящего совета: чтобы удалить элементы из контейнера, вызовите eraseпосле remove.

Элементы, подлежащие фактическому удалению, определить нетрудно — это все элементы исходного интервала, начиная с нового «логического конца» интервала и завершая его «физическим» концом. Чтобы уничтожить все эти элементы, достаточно вызвать интервальную форму erase(см. совет 5) и передать ей эти два итератора. Поскольку сам алгоритм removeвозвращает итератор для нового логического конца массива, задача решается прямолинейно:

vector v; //См. ранее

v.erase(remove(v.begin(), v.end(), 99), v.end());// Фактическое удаление

// элементов со значением 99

cout << v.size(); // Теперь выводится 7

Передача в первом аргументе интервальной формы eraseвозвращаемого значения removeиспользуется так часто, что рассматривается как стандартная конструкция. Removeи eraseнастолько тесно связаны, что они были объединены в функцию removeконтейнера list. Это единственная функция STL с именем remove, которая производит фактическое удаление элементов из контейнера:

list li; // Создать список

… // Заполнить данными

li.remove(99);// Удалить все элементы со значением 99.

// Команда производит фактическое удаление

// элементов из контейнера, поэтому размер li

// может измениться

Честно говоря, выбор имени removeв данном случае выглядит непоследовательно. В ассоциативных контейнерах аналогичная функция называется erase, поэтому в контейнере listфункцию removeтоже следовало назвать erase. Впрочем, этого не произошло, поэтому остается лишь смириться. Мир, в котором мы живем, не идеален, но другого все равно нет. Как упоминается в совете 44, для контейнеров listвызов функции removeболее эффективен, чем применение идиомы erase/remove.

Как только вы поймете, что алгоритм removeне может «по-настоящему» удалять объекты из контейнера, применение его в сочетании с eraseвойдет в привычку. Не забывайте, что remove— не единственный алгоритм, к которому относится это замечание. Существуют два других remove-подобных алгоритма: remove_ifи unique.

Сходство между removeи remove_ifнастолько прямолинейно, что я не буду на нем останавливаться, но алгоритм uniqueтоже похож на remove. Он предназначен для удаления смежных повторяющихся значений из интервала без доступа к контейнеру, содержащему элементы интервала. Следовательно, если вы хотите действительно удалить элементы из контейнера, вызов uniqueдолжен сопровождаться парным вызовом erase. В контейнере listтакже предусмотрена функция unique, производящая фактическое удаление смежных дубликатов. По эффективности она превосходит связку erase-unique.

Совет 33. Будьте внимательны при использовании remove-подобных алгоритмов с контейнерами указателей

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Эффективное использование STL»

Представляем Вашему вниманию похожие книги на «Эффективное использование STL» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Эффективное использование STL»

Обсуждение, отзывы о книге «Эффективное использование STL» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x