Иллюстрированный самоучитель по Visual Studio.Net



              

Контейнер типа set - часть 3


inserter (С, C.begin()), LessStrO);

cout « "\n\nDifference B/A: ";

copy (C.begin (), C.end(),

ostream_iterator<const char*>(cout, " "));

cout « "\n\n";

//====== Выводим разделитель

vector<char> line(50, ' = ');

ostream_iterator<char> os(cout, "") ;

copy (line .begin О , line.endO, os) ;

//====== Обычные массивы символов

char D[] = { 'a', 'b', 'с', 'd', ' e', 'f' };

char E[] = { 'A', 'B', 'C1, 'G', 'H1, 'H' };

cout « "\n\nSet D: ";

for (int i=0; i<N; i++) cout « D[i] « ", ";

cout « "\n\nSet E: ";

for (int i=0; i<N; i + -i-)

cout « E[i]«",";

cout « "\n\nSymmetric Difference D/E (nocase): ";

//====== Используем алгоритм set_symmetric_difference

//====== для обычных массивов символов

set_symmetric_difference(D, D + N, E, E + N,

ostream_iterator<char>(cout, " "), NoCase);

cout«"\n\n"; }

Новые возможности STL, которые использованы в этом фрагменте, — это использование адаптера insert_iterator и копирование содержимого контейнера прямо в выходной поток (см. ostream_iterator). Вывод в поток осуществляется с помощью особого типа итератора ostream_iterator, который осуществляет форматируемый вывод объектов типа Т в указанный выходной поток (ostream). Шаблон класса ostream_iterator настраивается на тип данных, в нашем случае const char*, а затем char, и берет в качестве параметров объект потокового вывода (cout) и разделитель, который мы специально изменяем по ходу дела для того, чтобы вы его обнаружили.

Insert_iterator — это адаптер (настройщик) итератора, который настраивает операнд, являющийся мишенью операции. Присвоение с помощью (сквозь призму) такого итератора вставляет объект в контейнер, раздвигая его, то есть, используя метод insert. Он следит за текущей позицией в контейнере (insertion point) и производит вставку перед ней. Здесь вы, однако, должны учесть различную семантику операции вставки в различные типы контейнеров.


Содержание  Назад  Вперед