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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

Допуская подобную ошибку, программист почти всегда рассчитывает на то, что результаты вызова алгоритма будут вставлены в приемный контейнер вызовом insert. Если вы хотите, чтобы это произошло, так и скажите. В конце концов, STL — всего лишь библиотека, и читать мысли ей не положено. В нашем примере задача решается построением итератора, определяющего начало приемного интервала, вызовом back_inserter:

vector values;

transform(values.begin(), // Применить transmogrify к каждому

values.end(), // объекту вектора values

back_inserter(results), // и дописать значения в конец results

transmogrify);

При использовании итератора, возвращаемого при вызове back_inserter, вызывается push_back, поэтому back_inserterможет использоваться со всеми контейнерами, поддерживающими push_back(то есть со всеми стандартными последовательными контейнерами: vector, string, dequeи list). Если вы предпочитаете, чтобы алгоритм вставлял элементы в начало контейнера, Воспользуйтесь front_inserter. Во внутренней реализации front_inserterиспользуется push_front, поэтому front_inserterработает только с контейнерами, поддерживающими эту функцию (то есть dequeи list).

… //См. ранее

listresults; // Теперь используется

// контейнер list

transform(values.begin(), values.end(), // Результаты вызова transform

front_inserter(results), // вставляются в начало results

transmogrify); // в обратном порядке

Поскольку при использовании front_inserterновые элементы заносятся в начало resultsфункцией push_front, порядок следования объектов в resultsбудет обратным по отношению к порядку соответствующих объектов в values. Это ишь одна из причин, по которым front_inserterиспользуется реже back_inserter. Другая причина заключается в том, что vectorне поддерживает push_front, поэтому front_inserterне может использоваться с vector.

Чтобы результаты transformвыводились в начале results, но с сохранением порядка следования элементов, достаточно перебрать содержимое valuesв обратном порядке:

list results; // См. ранее

transform(values. rbegin(), values. rend(), // Результаты вызова transform

front_inserter(results), // вставляются в начало results

transmogrify); // с сохранением исходного порядка

Итак, front_inserterзаставляет алгоритмы вставлять результаты своей работы в начало контейнера, a back_inserterобеспечивает вставку в конец контейнера. Вполне логично предположить, что inserterзаставляет алгоритм выводить свои результаты с произвольной позиции:

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

vector results; // См. ранее - за исключением того, что

… // results на этот раз содержит данные

// перед вызовом transform.

transform(values.begin(), // Результаты вызова transmogrify

values.end(), // выводятся в середине results

inserter(results, results, begin()+results.size()/2),

transmogrify);

Независимо от выбранной формы — back_inserter, front_inserterили inserter— объекты вставляются в приемный интервал по одному. Как объясняется в совете 5, это может привести к значительным затратам для блоковых контейнеров ( vector, stringи deque), однако средство, предложенное в совете 5 (интервальные функции), неприменимо в том случае, если вставка выполняется алгоритмом. В нашем примере transformзаписывает результаты в приемный интервал по одному элементу, и с этим ничего не поделаешь.

При вставке в контейнеры vectorи stringдля сокращения затрат можно последовать совету 14 и заранее вызвать reserve. Затраты на сдвиг элементов при каждой вставке от этого не исчезнут, но по крайней мере вы избавитесь от необходимости перераспределения памяти контейнера:

vector values; // См. Ранее

vector results;

results. reserve(results.size()+values.size()); // Обеспечить наличие

// в векторе results

// емкости для value.size()

// элементов

transform(values.begin(), values.end(), // То же, что и ранее,

inserter(results, results.begin()+results.size()/2), // но без лишних

transmogrify); // перераспределений памяти

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

Интервал:

Закладка:

Сделать

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

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


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

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

x