Скотт Мейерс - Эффективное использование STL
Название: | Эффективное использование STL | |
Автор: | Скотт Мейерс | |
Жанр: | Современные российские издания, Литература ХXI века (эпоха Глобализации экономики), Программирование: прочее, C, C++, C# | |
Изадано в серии: | Библиотека программиста | |
Издательство: | Питер | |
Год издания: | 2002 | |
ISBN: | 5-94723-382-7 | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "Эффективное использование STL"
В этой книге известный автор Скотт Мейерс раскрывает секреты настоящих мастеров, позволяющие добиться максимальной эффективности при работе с библиотекой STL.
Во многих книгах описываются возможности STL, но только в этой рассказано о том, как работать с этой библиотекой. Каждый из 50 советов книги подкреплен анализом и убедительными примерами, поэтому читатель не только узнает, как решать ту или иную задачу, но и когда следует выбирать то или иное решение — и почему именно такое.
К этой книге применимы такие ключевые слова (теги) как: Programming STL C++
Читаем онлайн "Эффективное использование STL". [Страница - 120]
list<Widget> lw;
…
lw.assign(vw.rbegin(), vw.rend()); // То же
SpeciаlContainer<Widget> scw;
…
scw.insert(scw.end(), lw.begin(), lw.end()); // То же
Несмотря на внешние различия, выделенные вызовы отвергаются компилятором по одной и той же причине: из-за отсутствия шаблонов функций класса в реализации STL. Соответственно и решение во всех случаях оказывается одним и тем же: замена вызовом copy с итератором вставки (см. совет 30). Ниже приведены обходные решения для всех примеров, приведенных ранее:
istream_iterator<Widget> begin(cin), end;
vector<Widget> vw(begin, end); //Создать vw конструктором
copy(begin, end, back_inserter(vw)); // по умолчанию и скопировать
// в него объекты Widget из cin
list<Widget> lw;
…
lw.clear(); // Удалить из lw старые объекты;
copy(vw.rbegin(), vw.rend(), // скопировать объекты из vw
back_inserter(lw)); //(в обратном порядке)
SpecialContainer<Widget> scw;
copy(lw.begin(), lw.end(), // Скопировать объекты Widget
inserter(scw, scw.end())); // из lw в конец scw
Я рекомендую использовать эти обходные решения с библиотекой, входящей в комплект поставки MSVC4-5. С другой стороны, будьте внимательны и не забывайте о том, что эти решения являются обходными. Как показано в совете 5, алгоритм copy почти всегда уступает интервальной функции контейнера, поэтому как только представится возможность обновить платформу STL до версии с поддержкой шаблонов функций класса, откажитесь от использования copy в тех местах, где следовало бы использовать интервальные функции.
Обходное решение для MSVC6
Обходное решение из предыдущего раздела подходит и для MSVC6, но в этом случае существует и другой вариант. Компиляторы MSVC4-5 не обладают полноценной поддержкой шаблонов функций класса, поэтому отсутствие этих шаблонов в реализации STL несущественно. В MSVC6 дело обстоит иначе, поскольку компилятор этой среды поддерживает шаблоны функций класса. Таким образом, возникает естественное желание заменить реализацию STL из поставки MSVC6 другой реализацией с шаблонами функций классов, предписанными Стандартом.В совете 50 упоминаются свободно распространяемые реализации STL от SGI и STLport; в списках поддерживаемых компиляторов обеих реализаций упоминается MSVC6. Кроме того, можно приобрести новейшую MSVC-совместимую реализацию STL от Dinkumware. У каждого из этих вариантов есть свои достоинства и недостатки.
Реализации SGI и STLport распространяются бесплатно, поэтому какая-либо официальная поддержка в этих случаях попросту отсутствует. Более того, поскольку реализации SGI и STLport рассчитаны на работу с разными компиляторами, вам придется дополнительно настроить их для обеспечения максимального быстродействия в MSVC6. В частности, может потребоваться включение поддержки шаблонов функций классов — из-за совместимости с большим количеством разных компиляторов в SGI и/или STLport эта поддержка отключена по умолчанию. Возможно, также придется позаботиться о компоновке с другими библиотеками MSVC6 (особенно DLL), проследить за использованием соответствующих версий для отладки и т. д.
Если подобные вещи вас пугают или вы руководствуетесь принципом «бесплатные программы обходятся слишком дорого», рассмотрите альтернативную реализацию STL для MSVC6 от Dinkumware. Библиотека проектировалась с расчетом на максимальную простоту замены и на соответствие Стандарту. Реализация STL из MSVC6 разрабатывалась именно в Dinkumware, поэтому вполне возможно, что новая реализация STL действительно легко заменяет оригинал. За дополнительной информацией о реализациях STL от Dunkumware обращайтесь на сайт компании http://www.dunkumware.com.
Независимо от того, на какой реализации вы остановите свой выбор, вы получите нечто большее, чем STL с шаблонами функций классов. В альтернативных реализациях будут решены проблемы соответствия Стандарту в других областях — скажем, отсутствие объявления push_back в контейнере string. Более того, в вашем распоряжении окажутся полезные расширения STL, в том числе хэшированные контейнеры (см. совет 25) и односвязные списки (контейнер slist). Реализации SGI и STLport также содержат множество нестандартных классов функторов, включая select1st и select2nd (см. совет 50).
Но даже если вы вынуждены работать с реализацией STL из поставки MSVC6, сайт Dunkumware все же стоит посетить. На нем перечислены известные ошибки в реализации библиотеки MSVC6 и приведены рекомендации относительно того, как модифицировать библиотеку для сокращения ее недостатков. --">Книги схожие с «Эффективное использование STL» по жанру, серии, автору или названию:
Эрик Мэтиз - Изучаем Python. Программирование игр, визуализация данных, веб-приложения Жанр: Программирование игр Серия: Библиотека программиста |
Роберт Сесил Мартин - Чистый Agile. Основы гибкости Жанр: Современные российские издания Год издания: 2020 Серия: Библиотека программиста |
Владстон Феррейра Фило - Теоретический минимум по Computer Science Жанр: Другие языки и системы программирования Год издания: 2018 Серия: Библиотека программиста |
Джастин Зейтц, Тим Арнольд - Black Hat Python: программирование для хакеров и пентестеров Жанр: Хакерство Год издания: 2022 Серия: Библиотека программиста |
Другие книги из серии «Библиотека программиста»:
Джеффри Фридл - Регулярные выражения. 2-е изд. Жанр: Литература ХXI века (эпоха Глобализации экономики) Год издания: 2003 Серия: Библиотека программиста |
Михал Яворски, Тарек Зиаде - Python. Лучшие практики и инструменты Жанр: Python Год издания: 2021 Серия: Библиотека программиста |
Грант Бейлевельд, Джон Крон, Аглаэ Бассенс - Глубокое обучение в картинках. Визуальный гид по искусственному интеллекту Жанр: Искусственный интеллект Год издания: 2020 Серия: Библиотека программиста |
Эл Свейгарт - Python. Чистый код для продолжающих Жанр: Python Год издания: 2022 Серия: Библиотека программиста |