Библиотека knigago >> Компьютеры: Языки и системы программирования >> C, C++, C# >> Эффективное использование STL


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 2072, книга: Посторонние. Книга 4
автор: Нина Грецких

Я прочитал книгу "Посторонние. Книга 4" Нины Грецких, и могу сказать, что это очень увлекательная и захватывающая история. Тема жизненного выбора и роковой страсти представлена здесь очень реалистично и глубоко. Автор умело рисует характеры своих героев, их внутренние переживания и мотивы. Главный герой, Кирилл, сталкивается с тяжелым жизненным выбором между любовью к своей жене и страстью к другой женщине. Через его сомнения и метания читатель проникается пониманием сложности...

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

Эффективное использование STL
Книга - Эффективное использование STL.  Скотт Мейерс  - прочитать полностью в библиотеке КнигаГо
Название:
Эффективное использование STL
Скотт Мейерс

Жанр:

Современные российские издания, Литература ХXI века (эпоха Глобализации экономики), Программирование: прочее, C, C++, C#

Изадано в серии:

Библиотека программиста

Издательство:

Питер

Год издания:

ISBN:

5-94723-382-7

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Эффективное использование STL"

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

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


К этой книге применимы такие ключевые слова (теги) как: Programming STL C++

Читаем онлайн "Эффективное использование STL". [Страница - 119]

vector<Widget> vw;

deque<Widget> dw;

vw.insert(vw.end(), dw.begin(), dw.end()); // Присоединить к vw копию

                                           // объектов Widget из dw

Оказывается, эту операцию можно выполнить независимо от того, в каких контейнерах хранятся копируемые объекты. Подходят даже нестандартные контейнеры:

vector<Widget> vw;

list<Widget> lw;

vw.insert(vw.begin(), lw.begin(), lw.end()); // Присоединить к vw копию

                                             // объектов Widget из lw

set<Widget> sw;

vw.insert(vw.begin(), sw.begin(), sw.end()); // Присоединить к vw копию

                                             // объектов Widget из sw

template<typename T,

 typename Allocator = allocator<T> > // Шаблон нестандартного

 class SpecialContainer{…};          // STL-совместимого контейнера


SpecialContainer<Widget> scw;

vw.insert(vw.begin(), scw.begin(), scw.end()); // Присоединить к vw копию

                                               // объектов Widget из scw

Подобная универсальность объясняется тем, что интервальная функция insert контейнера range вообще не является функцией в общепринятом смысле. Это шаблон функции контейнера, специализация которого с произвольным типом итератора порождает конкретную интервальную функцию insert. Для контейнера vector шаблон insert объявлен в Стандарте следующим образом:

template <class T, class Allocator = allocator<T> >

class vector {

public:

 …

 template<class InputIterator>

 void insert(iterator position, InputIterator first, InputIterator last);

};

Каждый стандартный контейнер должен поддерживать шаблонную версию интервальной функции insert. Аналогичные шаблоны также обязательны для интервальных конструкторов и для интервальной формы assign (см. совет 5).

MSVC версий 4-6

К сожалению, в реализации STL, входящей в комплект поставки версий 4-6, шаблоны функций не объявляются. Библиотека изначально разрабатывалась для MSVC версии 4, а этот компилятор, как и большинство компиляторов того времени, не обладал поддержкой шаблонов функций классов. При переходе от MSCV4 к MSVC6 поддержка этих шаблонов была включена в компилятор, но вследствие судебных дел, косвенно затрагивавших фирму Microsoft, библиотека оставалась практически в неизменном состоянии.

Поскольку реализация STL, поставляемая с MSVC4-6, предназначалась для компилятора без поддержки шаблонов функций классов, авторы библиотеки имитировали эти шаблоны и заменили их конкретными функциями, которым при вызове передавались итераторы контейнера соответствующего типа. Например, шаблон insert был заменен следующей функцией:

void insert(iterator position,   // "iterator" - тип итератора

 iterator first, iterator last); // для конкретного контейнера

Эта ограниченная форма интервальных функций позволяла выполнить интервальную вставку из vector<Widget> в vector<Widget> или из list<int> в list<int>, но смешанные операции (например, вставка из vector<Widget> в list<Widget> или из set<int> в deque<int>) не поддерживались. Более того, не поддерживалась даже интервальная вставка (а также конструирование или assign) из vector<long> в vector<int>, поскольку итераторы vector<long>::iterator и vector<int>::iterator относятся к разным типам. В результате следующий фрагмент, принимаемый другими компиляторами, не компилируется в MSVC4-6:

istream_iterator<Widget> begin(cin), end; // Создать итераторы begin и end

                                          // для чтения объектов Widget

                                          // из cin (см. совет 6).

vector<Widget> vw(begin, end); // Прочитать объекты Widget

                               // из cin в vw (см. совет 6)

                               // не компилируется в MSVC4-6!

list<Widget> lw;

lw.assign(vw.rbegin(), vw.rend()); // Присвоить lw содержимое vw

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

                                   // не компилируется в MSVC4-6!

SpeciаlContainer<Widget> scw;

scw.insert(scw.end(), lw.begin(), lw.end()); // Вставить в конец scw

                                             // копию объектов Widget из lw;

                                             // не компилируется в MSVC4-6!

Так что же делать, если вы работаете в среде MSVC4-6? Это зависит от используемой версии MSVC и того, вынуждены ли вы использовать реализацию STL, поставляемую вместе с компилятором.

Обходное решение для MSVC4-5

Еще раз посмотрим на правильный код, который не компилируется для реализации STL из поставки MSVC4-6:

vector<Widget> vw(begin, end); // Отвергается реализацией STL

                               // из поставки --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.

Книги схожие с «Эффективное использование STL» по жанру, серии, автору или названию:

XSLT. Стивен Холзнер
- XSLT

Жанр: Программирование: прочее

Год издания: 2002

Серия: Библиотека программиста

Другие книги из серии «Библиотека программиста»:

Отзывчивый дизайн на HTML5 и CSS3 для любых устройств. Бен Фрэйн
- Отзывчивый дизайн на HTML5 и CSS3 для любых устройств

Жанр: Web-дизайн

Год издания: 2022

Серия: Библиотека программиста

Глубокое обучение на Python. Франсуа Шолле
- Глубокое обучение на Python

Жанр: Python

Год издания: 2023

Серия: Библиотека программиста