<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>FreeSource - Статьи/КраткоОбоВсём/Clang/part2/part8</title>
<link>http://freesource.info/wiki/Статьи/КраткоОбоВсём/Clang/part2/part8</link>
<description>History/revisions of FreeSource/Статьи/КраткоОбоВсём/Clang/part2/part8</description>
<language>en-us</language>
<item>
<title>2007-08-30 09:16:25</title>
<link>http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8/show?time=2007-08-30+09%3A16%3A25</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a name=".stat_i.kratkoobovsjom.clang.part2.part8" href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8&amp;" class="">/Статьи&amp;nbsp;/&amp;nbsp;Кратко&amp;nbsp;Обо&amp;nbsp;Всём&amp;nbsp;/&amp;nbsp;Clang&amp;nbsp;/&amp;nbsp;part&amp;nbsp;2&amp;nbsp;/&amp;nbsp;part&amp;nbsp;8&lt;/a> за &lt;a href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8?time=2007-08-30+09%3A16%3A25">2007-08-30 09:16:25&lt;/a> и &lt;a href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8">2007-08-30 10:14:32&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">for(p1 = v.begin(); p1 != v.end(); p1++) cout &amp;lt;&amp;lt; *p1 &amp;lt;&amp;lt; ' ';&lt;br />
for(p2 = v.rbegin(); p2 != v.rend(); ++p2) cout &amp;lt;&amp;lt; *p2 &amp;lt;&amp;lt; ' ';&lt;br />
std::vector&amp;lt;int&amp;gt; v1(a, a+6);&lt;br />
&lt;strong>remove&lt;/strong>&lt;br />
for(int i=0; i&amp;nbsp;&amp;lt; values.size(); ++i) &lt;br />
&lt;em>pair&amp;lt;_ForwardIter, _ForwardIter&amp;gt; equal_range(_ForwardIter first, _ForwardIter last, const _Tp&amp; val);&lt;/em>&lt;br />
Возвращает пару прямых итераторов, содержащих результаты lower_bound и&amp;nbsp;upper_bound. &lt;br />
&lt;strong>find&lt;/strong>&lt;br />
&lt;em>find();&lt;/em>&lt;br />
Поиск ключа. &lt;br />
&lt;strong>lower_bound&lt;/strong>&lt;br />
&lt;em>_ForwardIter __lower_bound(_ForwardIter first, _ForwardIter last, const _Tp&amp; val, _Distance*)&lt;/em>&lt;br />
Определения позиции первого вхождения указанного ключа. &lt;br />
&lt;strong>upper_bound&lt;/strong>&lt;br />
&lt;em>_ForwardIter upper_bound(_ForwardIter first, _ForwardIter last, const _Tp&amp; val)&lt;/em>&lt;br />
Определения позиции за&amp;nbsp;последним вхождением указанного ключа. &lt;br />
&lt;strong>count&lt;/strong>&lt;br />
&lt;em>count();&lt;/em>&lt;br />
Возвращает количество указанных ключей в&amp;nbsp;контейнере. &lt;br />
Контейнеры &lt;strong>multiset&lt;/strong> и&amp;nbsp;&lt;strong>set&lt;/strong> используются для&amp;nbsp;быстрого сохранение и&amp;nbsp;выборки ключей. Контейнер multiset допускает использование одинаковых ключей. Упорядочение элементов определяется компараторным объектом-функцией. Контейнеры поддерживает двунаправленные итераторы (но не&amp;nbsp;итераторы произвольного доступа).&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;font color="#000000">
int&amp;nbsp;a[10]&amp;nbsp;=&amp;nbsp;{7,22,9,1,18,30,100,22,85,13};&lt;br />typedef&amp;nbsp;std::multiset&amp;lt;int,&amp;nbsp;std::&amp;lt;int&amp;gt;&amp;nbsp;&amp;gt;&amp;nbsp;ims;&lt;br />ims&amp;nbsp;intMultiset;&lt;br />std::ostream_iterator&amp;lt;int&amp;gt;&amp;nbsp;output(cout,&amp;nbsp;"&amp;nbsp;");&lt;br />intMultiset.insert(15);&lt;br />result=intMultiset.find(20);&lt;br />if&amp;nbsp;(&amp;nbsp;result&amp;nbsp;!=&amp;nbsp;intMultiset.end()&amp;nbsp;)&amp;nbsp;cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;"Найдено&amp;nbsp;значение";&lt;br />intMultiset.insert(a,&amp;nbsp;a+10);&lt;br />std::copy(intMultiset.begin(),intMultiset.end(),&amp;nbsp;output);&lt;/font>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
Контейнеры &lt;strong>multimap&lt;/strong> и&amp;nbsp;&lt;strong>map&lt;/strong> используются для&amp;nbsp;быстрого сохранения и&amp;nbsp;нахождения ключей и&amp;nbsp;ассоциированных значений (пара ключ/значение). При&amp;nbsp;вставке в&amp;nbsp;эти контейнеры используется объект pair. Контейнер &lt;strong>multimap&lt;/strong> позволяет ассоциировать несколько значений с&amp;nbsp;одним ключем. Упорядочение элементов определяется компараторным объектом-функцией. Контейнеры поддерживает двунаправленные итераторы (но не&amp;nbsp;итераторы произвольного доступа). &lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;font color="#000000">
typedef&amp;nbsp;std::multimap&amp;lt;int,&amp;nbsp;double,&amp;nbsp;std::less&amp;lt;int&amp;gt;&amp;nbsp;&amp;gt;&amp;nbsp;mmid;&lt;br />mmid&amp;nbsp;pairs;&lt;br />pairs.insert(mmid::value_type(15,&amp;nbsp;2.7)&amp;nbsp;);&lt;br />for(mmid::const_iterator&amp;nbsp;iter&amp;nbsp;=&amp;nbsp;pairs.begin();&amp;nbsp;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;iter&amp;nbsp;!=&amp;nbsp;pairs.end();&amp;nbsp;++iter)&lt;br />&amp;nbsp;&amp;nbsp;cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;iter-&amp;gt;first&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;'\t'&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;iter-&amp;gt;second&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;'\n';&lt;br />pairs[25]=45.65;&lt;/font>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;a name="h2161-1">&lt;/a>&lt;h5>Адаптеры контейнеров&lt;/h5>
STL&amp;nbsp;предоставляет три&amp;nbsp;адаптера контейнера &amp;ndash; stack, queue, priority_queue. Адаптеры не&amp;nbsp;являются контейнерами первого класса, поскольку они&amp;nbsp;не&amp;nbsp;предоставляют реализации фактической структуры данных в&amp;nbsp;которой могут сохраняться элементы, и&amp;nbsp;поскольку адаптеры не&amp;nbsp;поддерживают итераторы. Все&amp;nbsp;три класса адаптеров предоставляют функции-члены push и&amp;nbsp;pop, которые реализуют соответствующий метод вставки элемента. &lt;br />
Адаптер stack обеспечивает структуру LIFO и&amp;nbsp;может быть реализован с&amp;nbsp;любым из&amp;nbsp;контейнеров последовательности. Адаптер queue обеспечивает структуру FIFO и&amp;nbsp;может быть реализован с&amp;nbsp;контейнерами list и&amp;nbsp;deque. Адаптер priority_queue обеспечивает очередь в&amp;nbsp;которой наиболее приоритетное значение всегда будет удаляться первым. priority_queue может быть реализован с&amp;nbsp;контейнерами vector и&amp;nbsp;deque. Сравнение элементов выполняется с&amp;nbsp;помощью функции-объекта less&amp;lt;T&amp;gt;. &lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;font color="#000000">
std::stack&amp;lt;int&amp;gt;&amp;nbsp;intDequeStack;&lt;br />std::stack&amp;lt;int,&amp;nbsp;std::vector&amp;lt;int&amp;gt;&amp;nbsp;&amp;gt;&amp;nbsp;intVectorStack;&lt;br />std::stack&amp;lt;int,&amp;nbsp;std::list&amp;lt;int&amp;gt;&amp;nbsp;&amp;gt;&amp;nbsp;intListStack;&lt;br />intDequeStack.push(23);&lt;br />intVectorStack.push(23);&lt;br />intListStack.push(34);&lt;/font>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;a name="h2161-2">&lt;/a>&lt;h4>2.8.2 Итераторы&lt;/h4>
Итераторы схожи с&amp;nbsp;указателями и&amp;nbsp;используются для&amp;nbsp;указания на&amp;nbsp;элементы контейнеров первого класса. STL&amp;nbsp;контейнеры первого класса предоставляют функции-члены begin() и&amp;nbsp;end(), которые возвращают итератор указывающий соответственно на&amp;nbsp;первый и&amp;nbsp;последний элемент контейнера. Если итератор i&amp;nbsp;указывает на&amp;nbsp;определённый элемент, то&amp;nbsp;++i указывает на&amp;nbsp;&amp;laquo;следующий&amp;raquo; элемент, а&amp;nbsp;*i ссылается на&amp;nbsp;элемент, на&amp;nbsp;который указывает i. Итератор, полученый из&amp;nbsp;функции end(), может использоваться в&amp;nbsp;сравнении на&amp;nbsp;равенство и&amp;nbsp;неравенство для&amp;nbsp;определения окончания &amp;laquo;движущегося итератора&amp;raquo;. Для&amp;nbsp;ссылки на&amp;nbsp;элемент контейнера используется объект типа iterator или&amp;nbsp;const_iterator. &lt;br />
Таблица 13. &lt;strong>Операции с&amp;nbsp;итераторами для&amp;nbsp;каждого типа итератора&lt;/strong>&lt;br />
||&lt;div style="float:center; text-align:center">&lt;strong>Все итераторы&lt;/strong>&lt;/div>||&lt;br />
||++p|Преинкримент итератора||&lt;br />
||p++|Постинкримент итератора||&lt;br />
||&lt;div style="float:center; text-align:center">&lt;strong>Итераторы ввода&lt;/strong>&lt;/div>||&lt;br />
||*p|Разыменование итератора||&lt;br />
||p=p1|Присвоение итератора итератору||&lt;br />
||p==p1|Сравнение итераторов на&amp;nbsp;равенство||&lt;br />
||p!=p1|Сравнение итераторов на&amp;nbsp;неравенство||&lt;br />
||&lt;div style="float:center; text-align:center">&lt;strong>Итераторы вывода&lt;/strong>&lt;/div>||&lt;br />
||*p|Разыменование итератора||&lt;br />
||p=p1|Присвоение итератора итератору||&lt;br />
||&lt;div style="float:center; text-align:center">&lt;strong>Однонаправленные итераторы&lt;/strong>&lt;/div>||&lt;br />
||*|Обеспечивают все&amp;nbsp;функциональные возможности итераторов ввода и&amp;nbsp;вывода||&lt;br />
||&lt;div style="float:center; text-align:center">&lt;strong>Двунаправленные итераторы&lt;/strong>&lt;/div>||&lt;br />
||-p|Предекремент итератора||&lt;br />
||p-|Постдекремент итератора||&lt;br />
||&lt;div style="float:center; text-align:center">&lt;strong>Итераторы с&amp;nbsp;произвольным доступом&lt;/strong>&lt;/div>||&lt;br />
||p+=i|Инкремент итератора p&amp;nbsp;на i&amp;nbsp;позиций||&lt;br />
||p-=i|Декремент итератора p&amp;nbsp;на i&amp;nbsp;позиций||&lt;br />
||p+i|Итератор помещается на&amp;nbsp;позицию p+i||&lt;br />
||p-i|Итератор помещается на&amp;nbsp;позицию p-i||&lt;br />
||p[i]|Возвращение ссылку на&amp;nbsp;элемент, смещённый от&amp;nbsp;p на&amp;nbsp;i позиций||&lt;br />
||p&amp;lt;p1, p&amp;lt;=p1, p&amp;gt;p1, p&amp;gt;=p1|Сравнение итераторов||&lt;br />
Категории итераторов: &lt;br />
&lt;ul>&lt;li> input &amp;ndash; Используется для&amp;nbsp;чтения элементов из&amp;nbsp;контейнера. Итератор для&amp;nbsp;чтения может перемещаться только по&amp;nbsp;направлению вперёд и&amp;nbsp;поддерживает только однопроходные алгоритмы.
&lt;/li>&lt;li> output &amp;ndash; Используется для&amp;nbsp;записи элемента в&amp;nbsp;контейнер. Итератор для&amp;nbsp;записи может перемещаться только по&amp;nbsp;направлению вперёд и&amp;nbsp;поддерживает только однопроходные алгоритмы.
&lt;/li>&lt;li> forward &amp;ndash; Объединяет возможности итераторов для&amp;nbsp;чтения и&amp;nbsp;для записи и&amp;nbsp;сохраняет их&amp;nbsp;позицию в&amp;nbsp;контейнере.
&lt;/li>&lt;li> bidirectional &amp;ndash; Объединяет возможности однонаправленного итератора с&amp;nbsp;возможностью перемещаться в&amp;nbsp;обратном направлении.
&lt;/li>&lt;li> random access &amp;ndash; Объединяет возможности двунаправленного итератора с&amp;nbsp;возможностью прямого доступа к&amp;nbsp;любому элементу контейнера.&lt;/li>&lt;/ul>
Категория итератора, поддерживаемая каждым контейнером, определяет, может ли&amp;nbsp;этот контейнер использоваться со&amp;nbsp;специфическими алгоритмами в&amp;nbsp;STL.&lt;a name="h2161-3">&lt;/a>&lt;h4>2.8.3 Алгоритмы&lt;/h4>
Контейнеры инкапсулируют некоторые базовые операции, но&amp;nbsp;STL-алгоритмы реализуются независимо от&amp;nbsp;контейнеров. Алгоритмы оперируют элементами контейнеров только с&amp;nbsp;помощью итераторов. Можно создавать собственные алгоритмы.&lt;a name="h2161-4">&lt;/a>&lt;h5>Алгоритмы, модифицирующие последовательности&lt;/h5>
&lt;strong>copy&lt;/strong>&lt;br />
&lt;em>copy();&lt;/em>&lt;br />
Копирование.&lt;br />
&lt;strong>copy_backward&lt;/strong>&lt;br />
&lt;em>_BidirectionalIter2 __copy_backward(_BidirectionalIter1 first, _BidirectionalIter1 last, _BidirectionalIter2 result, bidirectional_iterator_tag, _Distance*)&lt;/em>&lt;br />
Обратное копирование части одного контейнера в&amp;nbsp;другой контейнер. &lt;br />
&lt;strong>fill&lt;/strong>&lt;br />
&lt;em>void fill(_ForwardIter first, _ForwardIter last, const _Tp&amp; value);&lt;/em>&lt;br />
Заполняет все&amp;nbsp;элементы контейнера значением &amp;lt;value&amp;gt;. &lt;br />
&lt;strong>fill_n&lt;/strong>&lt;br />
&lt;em>_OutputIter fill_n(_OutputIter first, _Size n, const _Tp&amp; value);&lt;/em>&lt;br />
Заполняет указанные элементы контейнера значением &amp;lt;value&amp;gt;. &lt;br />
&lt;strong>generate&lt;/strong>&lt;br />
&lt;em>void generate(_ForwardIter first, _ForwardIter last, _Generator gen)&lt;/em>&lt;br />
Заполняет все&amp;nbsp;элементы контейнера значением возвращаемым функцией &amp;lt;gen&amp;gt;. &lt;br />
&lt;strong>generate_n&lt;/strong>&lt;br />
&lt;em>generate_n();&lt;/em>&lt;br />
Заполняет указанные элементы контейнера значением возвращаемым функцией &amp;lt;gen&amp;gt;. &lt;br />
&lt;strong>iter_swap&lt;/strong>&lt;br />
&lt;em>void iter_swap(_ForwardIter1 a, _ForwardIter2 b);&lt;/em>&lt;br />
Перестановка значений контейнера (по ссылке). &lt;br />
&lt;strong>includes&lt;/strong>&lt;br />
&lt;em>bool includes(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2);&lt;/em>&lt;br />
Проверяет находятся ли&amp;nbsp;элементы второго множества в&amp;nbsp;первом. &lt;br />
&lt;strong>next_permutation&lt;/strong>&lt;br />
&lt;em>bool next_permutation(_BidirectionalIter first, _BidirectionalIter last);&lt;/em>&lt;br />
Следующая перестановка в&amp;nbsp;лексикографическом порядке. &lt;br />
&lt;strong>prev_permutation&lt;/strong>&lt;br />
&lt;em>bool prev_permutation(_BidirectionalIter first, _BidirectionalIter last);&lt;/em>&lt;br />
Предыдущая перестановка в&amp;nbsp;лексикографическом порядке. &lt;br />
&lt;strong>partition&lt;/strong>&lt;br />
&lt;em>_ForwardIter partition(_ForwardIter first, _ForwardIter last, _Predicate pred);&lt;/em>&lt;br />
Разделение диапазонов элементов. &lt;br />
&lt;strong>remove&lt;/strong>&lt;br />
&lt;em>_ForwardIter remove(_ForwardIter first, _ForwardIter last, const _Tp&amp; value);&lt;/em>&lt;br />
Удаление из&amp;nbsp;указанного участка контейнера всех указанных объектов &amp;lt;value&amp;gt; &lt;br />
&lt;strong>remove_copy&lt;/strong>&lt;br />
&lt;em>_OutputIter remove_copy(_InputIter first, _InputIter last, _OutputIter result, const _Tp&amp; value);&lt;/em>&lt;br />
Перенос из&amp;nbsp;указанного участка контейнера в&amp;nbsp;другой контейнер всех указанных объектов &amp;lt;value&amp;gt;. &lt;br />
&lt;strong>remove_copy_if&lt;/strong>&lt;br />
&lt;em>remove_copy_if();&lt;/em>&lt;br />
Перенос из&amp;nbsp;указанного участка контейнера в&amp;nbsp;другой контейнер объектов выбранных функцией сравнения &amp;lt;pred&amp;gt;. &lt;br />
&lt;strong>remove_if&lt;/strong>&lt;br />
&lt;em>_ForwardIter remove_if(_ForwardIter first, _ForwardIter last, _Predicate pred);&lt;/em>&lt;br />
Удаление из&amp;nbsp;указанного участка контейнера объектов выбранных функцией сравнения &amp;lt;pred&amp;gt; &lt;br />
&lt;strong>replace&lt;/strong>&lt;br />
&lt;em>void replace(_ForwardIter first, _ForwardIter last, const _Tp&amp; old_value, const _Tp&amp; new_value);&lt;/em>&lt;br />
Производит замену объекта &amp;lt;old_value&amp;gt; на&amp;nbsp;&amp;lt;new_value&amp;gt; по&amp;nbsp;указанному участку контейнера. &lt;br />
&lt;strong>replace_copy&lt;/strong>&lt;br />
&lt;em>_OutputIter replace_copy(_InputIter first, _InputIter last, _OutputIter result, const _Tp&amp; old_value, const _Tp&amp; new_value);&lt;/em>&lt;br />
Производит замену объекта &amp;lt;old_value&amp;gt; на&amp;nbsp;&amp;lt;new_value&amp;gt; по&amp;nbsp;указанному участку контейнера и&amp;nbsp;помещений старых значений в&amp;nbsp;контейнер &amp;lt;result&amp;gt;.&lt;br />
&lt;strong>replace_copy_if&lt;/strong>&lt;br />
&lt;em>_OutputIter replace_copy_if(Iterator first, Iterator last, _OutputIter result, _Predicate pred, const _Tp&amp; new_value);&lt;/em>&lt;br />
Производит замену объекта выбраного функцией &amp;lt;pred&amp;gt; на&amp;nbsp;&amp;lt;new_value&amp;gt; по&amp;nbsp;указанному участку контейнера и&amp;nbsp;помещений старых значений в&amp;nbsp;контейнер &amp;lt;result&amp;gt;. &lt;br />
&lt;strong>replace_if&lt;/strong>&lt;br />
&lt;em>void replace_if(_ForwardIter __first, _ForwardIter last, _Predicate pred, const _Tp&amp; new_value);&lt;/em>&lt;br />
Производит замену объекта выбраного функцией &amp;lt;pred&amp;gt; на&amp;nbsp;&amp;lt;new_value&amp;gt; по&amp;nbsp;указанному участку контейнера. &lt;br />
&lt;strong>reverse&lt;/strong>&lt;br />
&lt;em>void reverse(_BidirectionalIter first, _BidirectionalIter last, bidirectional_iterator_tag);&lt;/em>&lt;br />
Инвертирование последовательности указанных элементов контейнера./ &lt;br />
&lt;strong>reverse_copy&lt;/strong>&lt;br />
&lt;em>_OutputIter reverse_copy(_BidirectionalIter first, _BidirectionalIter last, _OutputIter result);&lt;/em>&lt;br />
Копирует указанные элементы в&amp;nbsp;обратном порядке. &lt;br />
&lt;strong>rotate&lt;/strong>&lt;br />
&lt;em>_ForwardIter rotate(_ForwardIter first, _ForwardIter middle, _ForwardIter last);&lt;/em>&lt;br />
Ротация элементов. &lt;br />
&lt;strong>rotate_copy&lt;/strong>&lt;br />
&lt;em>_OutputIter rotate_copy(_ForwardIter first, _ForwardIter middle, _ForwardIter last, _OutputIter result);&lt;/em>&lt;br />
Ротация элементов с&amp;nbsp;копированием. &lt;br />
&lt;strong>set_difference&lt;/strong>&lt;br />
&lt;em>_OutputIter set_difference(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2, _OutputIter result);&lt;/em>&lt;br />
Определение элементов из&amp;nbsp;первого множества отсутствующих во&amp;nbsp;втором. &lt;br />
&lt;strong>set_intersection&lt;/strong>&lt;br />
&lt;em>_OutputIter set_intersection(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2, _OutputIter result);&lt;/em>&lt;br />
Определение элементов из&amp;nbsp;первого множества присутствующих во&amp;nbsp;втором. &lt;br />
&lt;strong>set_symmetric_difference&lt;/strong>&lt;br />
&lt;em>_OutputIter set_symmetric_difference(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2, _OutputIter result);&lt;/em>&lt;br />
Определение элементов из&amp;nbsp;первого множества отсутствующих во&amp;nbsp;втором и&amp;nbsp;элементов второго отсутствующих в&amp;nbsp;первом. &lt;br />
&lt;strong>set_union&lt;/strong>&lt;br />
&lt;em>_OutputIter set_union(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2, _OutputIter result);&lt;/em>&lt;br />
Создаёт множество отсортированных элементов их&amp;nbsp;двух контейнеров в&amp;nbsp;третьем. &lt;br />
&lt;strong>stable_partition&lt;/strong>&lt;br />
&lt;em>_ForwardIter stable_partition(_ForwardIter first, _ForwardIter last, _Predicate pred);&lt;/em>&lt;br />
Подобна partition. &lt;br />
&lt;strong>swap&lt;/strong>&lt;br />
&lt;em>void swap(_Tp&amp; a, _Tp&amp; b);&lt;/em>&lt;br />
Перестановка значений контейнера. &lt;br />
&lt;strong>swap_ranges&lt;/strong>&lt;br />
&lt;em>_ForwardIter2 swap_ranges(_ForwardIter1 first1, _ForwardIter1 last1, _ForwardIter2 first2);&lt;/em>&lt;br />
Перестановка группы элементов контейнера. &lt;br />
&lt;strong>transform&lt;/strong>&lt;br />
&lt;em>transform();&lt;/em>&lt;br />
-//- &lt;br />
&lt;strong>unique&lt;/strong>&lt;br />
&lt;em>_ForwardIter unique(_ForwardIter first, _ForwardIter last);&lt;/em>&lt;br />
Удаляет из&amp;nbsp;контейнера одинаковые элементы &lt;br />
&lt;strong>unique_copy&lt;/strong>&lt;br />
&lt;em>_OutputIter unique_copy(_InputIter first, _InputIter last, _OutputIter result, _Tp*);&lt;/em>&lt;br />
Копирует все&amp;nbsp;уникальные элементы в&amp;nbsp;другой контейнер. &lt;a name="h2161-5">&lt;/a>&lt;h5>Алгоритмы, не&amp;nbsp;модифицирующие последовательности&lt;/h5>
&lt;strong>adjacent_find&lt;/strong>&lt;br />
&lt;em>_ForwardIter adjacent_find(_ForwardIter first, _ForwardIter last, _BinaryPredicate binary_pred);&lt;/em>&lt;br />
Возвращает итератор для&amp;nbsp;чтения, указывающий на&amp;nbsp;первый из&amp;nbsp;двух идентичных смежных элементов в&amp;nbsp;последовательности. &lt;br />
&lt;strong>equal&lt;/strong>&lt;br />
&lt;em>inline bool equal(_InputIter1 first1, _InputIter1 last1,_InputIter2 first2);&lt;/em>&lt;br />
Сравнение указанных участков двух контейнеров. &lt;br />
&lt;strong>find&lt;/strong>&lt;br />
&lt;em>_InputIter find(_InputIter first, _InputIter last, const _Tp&amp; val, input_iterator_tag);&lt;/em>&lt;br />
Возвращает положение искомого значения &amp;lt;val&amp;gt; &lt;br />
&lt;strong>find_each&lt;/strong>&lt;br />
&lt;em>find_each();&lt;/em>&lt;br />
-//- &lt;br />
&lt;strong>find_end&lt;/strong>&lt;br />
&lt;em>find_end();&lt;/em>&lt;br />
-//- &lt;br />
&lt;strong>find_first_of&lt;/strong>&lt;br />
&lt;em>find_first_of();&lt;/em>&lt;br />
-//- &lt;br />
&lt;strong>find_if&lt;/strong>&lt;br />
&lt;em>InputIter find_if(_InputIter first, _InputIter last, _Predicate pred, input_iterator_tag);&lt;/em>&lt;br />
Возвращает положение значения определённого функцией &amp;lt;pred&amp;gt;. &lt;br />
&lt;strong>lexicographical_compare&lt;/strong>&lt;br />
&lt;em>bool lexicographical_compare(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2);&lt;/em>&lt;br />
Используется для&amp;nbsp;лексикографического сравнения двух массивов символов. &lt;br />
&lt;strong>max&lt;/strong>&lt;br />
&lt;em>const _Tp&amp; max(const _Tp&amp; a, const _Tp&amp; b);&lt;/em>&lt;br />
Определение максимального значения. &lt;br />
&lt;strong>min&lt;/strong>&lt;br />
&lt;em>const _Tp&amp; min(const _Tp&amp; a, const _Tp&amp; b);&lt;/em>&lt;br />
Определения минимального значения. &lt;br />
&lt;strong>mismatch&lt;/strong>&lt;br />
&lt;em>pair&amp;lt;_InputIter1, _InputIter2&amp;gt; mismatch(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2);&lt;/em>&lt;br />
Выполняет сравнение указанных участков двух контейнеров и&amp;nbsp;возвращает пару итераторов указывающих различные позиции контейнеров. &lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;font color="#000000">
std::pair&amp;lt;std::vector&amp;lt;int&amp;gt;::iterator,&amp;nbsp;std::vector&amp;lt;int&amp;gt;::iterator&amp;gt;&amp;nbsp;location;&amp;nbsp;&lt;br />location&amp;nbsp;=&amp;nbsp;std::mismatch(v1.begin(),v1.end(),v3.begin());&lt;/font>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
&lt;strong>search&lt;/strong>&lt;br />
&lt;em>search();&lt;/em>&lt;br />
-//- &lt;br />
&lt;strong>search_n&lt;/strong>&lt;br />
&lt;em>search_n();&lt;/em>&lt;br />
-//- &lt;a name="h2161-6">&lt;/a>&lt;h5>Числовые алгоритмы &amp;lt;numeric&amp;gt;&lt;/h5>
&lt;strong>accumulate&lt;/strong>&lt;br />
&lt;em>_Tp accumulate(_InputIterator first, _InputIterator last, _Tp init);&lt;/em>&lt;br />
Суммирование значений указанной области контейнера. &lt;br />
&lt;strong>adjacent_difference&lt;/strong>&lt;br />
&lt;em>_OutputIterator adjacent_difference(_InputIterator first, _InputIterator last, _OutputIterator result);&lt;/em>&lt;br />
Вычисление разницы между парой смежных элементов &lt;br />
&lt;strong>count&lt;/strong>&lt;br />
&lt;em>void count(_InputIter first, _InputIter last, const _Tp&amp; value,_Size&amp; n);&lt;/em>&lt;br />
Выполняет подсчет количества объектов &amp;lt;value&amp;gt; в&amp;nbsp;указанной области контейнера. &lt;br />
&lt;strong>count_if&lt;/strong>&lt;br />
&lt;em>void count_if(_InputIter first, _InputIter last, _Predicate pred, _Size&amp; n);&lt;/em>&lt;br />
Выполняет подсчет количества объектов выбранных функцией &amp;lt;pred&amp;gt; в&amp;nbsp;указанной области контейнера. &lt;br />
&lt;strong>for_each&lt;/strong>&lt;br />
&lt;em>_Function for_each(_InputIter first, _InputIter last, _Function f);&lt;/em>&lt;br />
Применение функции &amp;lt;f&amp;gt; к&amp;nbsp;указанным элементам контейнера. Общая функция должна принимать текущий элемент в&amp;nbsp;качестве аргумента и&amp;nbsp;не должна модифицировать этот элемент. &lt;br />
&lt;strong>inner_product&lt;/strong>&lt;br />
&lt;em>_Tp inner_product(_InputIterator1 first1, _InputIterator1 last1, _InputIterator2 first2, _Tp init);&lt;/em>&lt;br />
Вычисление суммы произведений двух последовательностей. &lt;br />
&lt;strong>max_element&lt;/strong>&lt;br />
&lt;em>_ForwardIter max_element(_ForwardIter first, _ForwardIter last);&lt;/em>&lt;br />
Возвращает указатель на&amp;nbsp;максимальный элемент в&amp;nbsp;контейнере. &lt;br />
&lt;strong>min_element&lt;/strong>&lt;br />
&lt;em>_ForwardIter min_element(_ForwardIter first, _ForwardIter last);&lt;/em>&lt;br />
Возвращает указатель на&amp;nbsp;минимальный элемент в&amp;nbsp;контейнере. &lt;br />
&lt;strong>nth_element&lt;/strong>&lt;br />
&lt;em>void nth_element(_RandomAccessIter first, _RandomAccessIter nth, _RandomAccessIter last);&lt;/em>&lt;br />
Разделение диапазонов элементов. &lt;br />
&lt;strong>partial_sum&lt;/strong>&lt;br />
&lt;em>_OutputIterator partial_sum(_InputIterator first, _InputIterator last, _OutputIterator result);&lt;/em>&lt;br />
Вычисление суммы элементов двух контейнеров с&amp;nbsp;накоплением. &lt;br />
&lt;strong>partial_sort&lt;/strong>&lt;br />
&lt;em>void partial_sort(_RandomAccessIter first, _RandomAccessIter middle, _RandomAccessIter last);&lt;/em>&lt;br />
Сортировка части последовательности. &lt;br />
&lt;strong>partial_sort_copy&lt;/strong>&lt;br />
&lt;em>_RandomAccessIter partial_sort_copy(_InputIter first, _InputIter last, _RandomAccessIter result_first, _RandomAccessIter result_last);&lt;/em>&lt;br />
Сортировка части последовательности с&amp;nbsp;копированием результата. &lt;br />
&lt;strong>random_shuffle&lt;/strong>&lt;br />
&lt;em>inline void random_shuffle(_RandomAccessIter first, _RandomAccessIter last);&lt;/em>&lt;br />
Располагает элементы указанного участка контейнера в&amp;nbsp;произвольном порядке. &lt;br />
&lt;strong>stable_sort&lt;/strong>&lt;br />
&lt;em>void stable_sort(_RandomAccessIter first, _RandomAccessIter last);&lt;/em>&lt;br />
Сортировка (аналогично sort) &lt;br />
&lt;strong>transform&lt;/strong>&lt;br />
&lt;em>_OutputIter transform(_InputIter first, _InputIter last, _OutputIter result, _UnaryOperation oper);&lt;/em>&lt;br />
Применение функции &amp;lt;f&amp;gt; к&amp;nbsp;указанным элементам контейнера. Общая функция должна принимать текущий элемент в&amp;nbsp;качестве аргумента, не&amp;nbsp;должна модифицировать этот элемент и&amp;nbsp;должна возвращать трансформированное значение. &lt;a name="h2161-7">&lt;/a>&lt;h5>Алгоритмы, сортировки кучи&lt;/h5>
&lt;strong>make_heap&lt;/strong>&lt;br />
&lt;em>make_heap(_RandomAccessIterator first, _RandomAccessIterator last);&lt;/em>&lt;br />
Создание и&amp;nbsp;инициализация кучи. &lt;br />
&lt;strong>pop_heap&lt;/strong>&lt;br />
&lt;em>void pop_heap(_RandomAccessIterator first, _RandomAccessIterator last);&lt;/em>&lt;br />
Удаление элемента с&amp;nbsp;вершины кучи. &lt;br />
&lt;strong>push_heap&lt;/strong>&lt;br />
&lt;em>void push_heap(_RandomAccessIterator first, _RandomAccessIterator last);&lt;/em>&lt;br />
Добавление нового элемента в&amp;nbsp;кучу. &lt;br />
&lt;strong>sort_heap&lt;/strong>&lt;br />
&lt;em>sort_heap(_RandomAccessIterator first, _RandomAccessIterator last, _Compare comp);&lt;/em>&lt;br />
Сортировка последовательности значений. &lt;a name="h2161-8">&lt;/a>&lt;h4>2.8.4 Класс &amp;lt;bitset&amp;gt;&lt;/h4>
Класс &lt;strong>bitset&lt;/strong> обеспечивает операции для&amp;nbsp;создания и&amp;nbsp;манипуляции наборами битов. Наборы битов имеют фиксированный размер: bitset&amp;lt;size&amp;gt; b;. Операции:&lt;br />
&lt;strong>set&lt;/strong>&lt;br />
Установка указанного бита. &lt;br />
&lt;strong>reset&lt;/strong>&lt;br />
Сброс указанного бита. &lt;br />
&lt;strong>flip&lt;/strong>&lt;br />
Переключает бит. &lt;br />
&lt;strong>at&lt;/strong>&lt;br />
Получить бит. &lt;br />
&lt;strong>test&lt;/strong>&lt;br />
Проверка бита. &lt;br />
&lt;strong>size&lt;/strong>&lt;br />
Возвращает число битов в&amp;nbsp;наборе. &lt;br />
&lt;strong>count&lt;/strong>&lt;br />
Возвращает число установленных битов. &lt;br />
&lt;strong>any&lt;/strong>&lt;br />
Возвращает true если хоть один бит&amp;nbsp;в&amp;nbsp;наборе установлен. &lt;br />
&lt;strong>none&lt;/strong>&lt;br />
Возвращает true если не&amp;nbsp;один бит&amp;nbsp;в&amp;nbsp;наборе неустановлен. &lt;br />
&lt;strong>==, !=&lt;/strong>&lt;br />
Сравнение наборов битов. &lt;br />
&lt;strong>&amp;=, |=, ^ =, &amp;gt;&amp;gt;=, &amp;lt;&amp;lt;=&lt;/strong>&lt;br />
Битовые операции над&amp;nbsp;наборами битов. &lt;br />
&lt;strong>to_string&lt;/strong>&lt;br />
Преобразует набор битов в&amp;nbsp;строку. &lt;br />
&lt;strong>to_ulong&lt;/strong>&lt;br />
Преобразует набор битов в&amp;nbsp;unsigned long. &lt;a name="h2161-9">&lt;/a>&lt;h4>2.8.5 Объекты-функции&lt;/h4>
Объекты-функции и&amp;nbsp;адаптеры-функций предназначены для&amp;nbsp;того чтобы сделать STL&amp;nbsp;более гибкой. Объект-функция содержит функцию, которая может быть интерпретирована с&amp;nbsp;синтаксической и&amp;nbsp;семантической точки зрения как&amp;nbsp;функция, использующая operator(). Объекты-функции STL:&lt;br />
&lt;strong>divides&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; арифметический;&lt;br />
&lt;strong>equal_to&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; реляционный; &lt;br />
&lt;strong>greater&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; реляционный;&lt;br />
&lt;strong>greater_equal&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; реляционный;&lt;br />
&lt;strong>less&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; реляционный;&lt;br />
&lt;strong>less_equal&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; реляционный; &lt;br />
&lt;strong>logical_and&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; логический; &lt;br />
&lt;strong>logical_not&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; логический; &lt;br />
&lt;strong>logical_or&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; логический; &lt;br />
&lt;strong>minus&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; арифметический; &lt;br />
&lt;strong>moduls&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; арифметический; &lt;br />
&lt;strong>negate&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; арифметический; &lt;br />
&lt;strong>not_equal_to&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; реляционный; &lt;br />
&lt;strong>plus&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; арифметический; &lt;br />
&lt;strong>multiplies&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; арифметический;&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">for(p1 = v.begin(); p1 != v.end(); p1  ) cout &amp;lt;&amp;lt; *p1 &amp;lt;&amp;lt; ' ';&lt;br />
for(p2 = v.rbegin(); p2 != v.rend();   p2) cout &amp;lt;&amp;lt; *p2 &amp;lt;&amp;lt; ' ';&lt;br />
std::vector&amp;lt;int&amp;gt; v1(a, a&amp;nbsp;6);&lt;br />
*&lt;br />
6a51&lt;br />
*remov&lt;br />
1000&lt;br />
e**&lt;br />
for(int i=0; i&amp;nbsp;&amp;lt; values.size();   i) &lt;br />
//pair&amp;lt;_ForwardIter, _ForwardIter&amp;gt; equal_range(_ForwardIter first, _ForwardIter last, const _Tp&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2007-08-30 08:14:30</title>
<link>http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8/show?time=2007-08-30+08%3A14%3A30</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8&amp;" class="">/Статьи&amp;nbsp;/&amp;nbsp;Кратко&amp;nbsp;Обо&amp;nbsp;Всём&amp;nbsp;/&amp;nbsp;Clang&amp;nbsp;/&amp;nbsp;part&amp;nbsp;2&amp;nbsp;/&amp;nbsp;part&amp;nbsp;8&lt;/a> за &lt;a href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8?time=2007-08-30+08%3A14%3A30">2007-08-30 08:14:30&lt;/a> и &lt;a href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8?time=2007-08-30+09%3A16%3A25">2007-08-30 09:16:25&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">*remov&lt;br />
1000&lt;br />
e**&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">*remove**&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2007-03-31 17:39:16</title>
<link>http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8/show?time=2007-03-31+17%3A39%3A16</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8&amp;" class="">/Статьи&amp;nbsp;/&amp;nbsp;Кратко&amp;nbsp;Обо&amp;nbsp;Всём&amp;nbsp;/&amp;nbsp;Clang&amp;nbsp;/&amp;nbsp;part&amp;nbsp;2&amp;nbsp;/&amp;nbsp;part&amp;nbsp;8&lt;/a> за &lt;a href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8?time=2007-03-31+17%3A39%3A16">2007-03-31 17:39:16&lt;/a> и &lt;a href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8?time=2007-08-30+08%3A14%3A30">2007-08-30 08:14:30&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">for(p1 = v.begin(); p1 != v.end(); p1  ) cout &amp;lt;&amp;lt; *p1 &amp;lt;&amp;lt; ' ';&lt;br />
for(p2 = v.rbegin(); p2 != v.rend();   p2) cout &amp;lt;&amp;lt; *p2 &amp;lt;&amp;lt; ' ';&lt;br />
std::vector&amp;lt;int&amp;gt; v1(a, a&amp;nbsp;6);&lt;br />
*&lt;br />
6a51&lt;br />
*remove**&lt;br />
for(int i=0; i&amp;nbsp;&amp;lt; values.size();   i) &lt;br />
//pair&amp;lt;_ForwardIter, _ForwardIter&amp;gt; equal_range(_ForwardIter first, _ForwardIter last, const _Tp&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">for(p1 = v.begin(); p1 != v.end(); p1++) cout &amp;lt;&amp;lt; *p1 &amp;lt;&amp;lt; ' ';&lt;br />
for(p2 = v.rbegin(); p2 != v.rend(); ++p2) cout &amp;lt;&amp;lt; *p2 &amp;lt;&amp;lt; ' ';&lt;br />
std::vector&amp;lt;int&amp;gt; v1(a, a+6);&lt;br />
&lt;strong>remove&lt;/strong>&lt;br />
for(int i=0; i&amp;nbsp;&amp;lt; values.size(); ++i) &lt;br />
&lt;em>pair&amp;lt;_ForwardIter, _ForwardIter&amp;gt; equal_range(_ForwardIter first, _ForwardIter last, const _Tp&amp; val);&lt;/em>&lt;br />
Возвращает пару прямых итераторов, содержащих результаты lower_bound и&amp;nbsp;upper_bound. &lt;br />
&lt;strong>find&lt;/strong>&lt;br />
&lt;em>find();&lt;/em>&lt;br />
Поиск ключа. &lt;br />
&lt;strong>lower_bound&lt;/strong>&lt;br />
&lt;em>_ForwardIter __lower_bound(_ForwardIter first, _ForwardIter last, const _Tp&amp; val, _Distance*)&lt;/em>&lt;br />
Определения позиции первого вхождения указанного ключа. &lt;br />
&lt;strong>upper_bound&lt;/strong>&lt;br />
&lt;em>_ForwardIter upper_bound(_ForwardIter first, _ForwardIter last, const _Tp&amp; val)&lt;/em>&lt;br />
Определения позиции за&amp;nbsp;последним вхождением указанного ключа. &lt;br />
&lt;strong>count&lt;/strong>&lt;br />
&lt;em>count();&lt;/em>&lt;br />
Возвращает количество указанных ключей в&amp;nbsp;контейнере. &lt;br />
Контейнеры &lt;strong>multiset&lt;/strong> и&amp;nbsp;&lt;strong>set&lt;/strong> используются для&amp;nbsp;быстрого сохранение и&amp;nbsp;выборки ключей. Контейнер multiset допускает использование одинаковых ключей. Упорядочение элементов определяется компараторным объектом-функцией. Контейнеры поддерживает двунаправленные итераторы (но не&amp;nbsp;итераторы произвольного доступа).&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;font color="#000000">
int&amp;nbsp;a[10]&amp;nbsp;=&amp;nbsp;{7,22,9,1,18,30,100,22,85,13};&lt;br />typedef&amp;nbsp;std::multiset&amp;lt;int,&amp;nbsp;std::&amp;lt;int&amp;gt;&amp;nbsp;&amp;gt;&amp;nbsp;ims;&lt;br />ims&amp;nbsp;intMultiset;&lt;br />std::ostream_iterator&amp;lt;int&amp;gt;&amp;nbsp;output(cout,&amp;nbsp;"&amp;nbsp;");&lt;br />intMultiset.insert(15);&lt;br />result=intMultiset.find(20);&lt;br />if&amp;nbsp;(&amp;nbsp;result&amp;nbsp;!=&amp;nbsp;intMultiset.end()&amp;nbsp;)&amp;nbsp;cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;"Найдено&amp;nbsp;значение";&lt;br />intMultiset.insert(a,&amp;nbsp;a+10);&lt;br />std::copy(intMultiset.begin(),intMultiset.end(),&amp;nbsp;output);&lt;/font>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
Контейнеры &lt;strong>multimap&lt;/strong> и&amp;nbsp;&lt;strong>map&lt;/strong> используются для&amp;nbsp;быстрого сохранения и&amp;nbsp;нахождения ключей и&amp;nbsp;ассоциированных значений (пара ключ/значение). При&amp;nbsp;вставке в&amp;nbsp;эти контейнеры используется объект pair. Контейнер &lt;strong>multimap&lt;/strong> позволяет ассоциировать несколько значений с&amp;nbsp;одним ключем. Упорядочение элементов определяется компараторным объектом-функцией. Контейнеры поддерживает двунаправленные итераторы (но не&amp;nbsp;итераторы произвольного доступа). &lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;font color="#000000">
typedef&amp;nbsp;std::multimap&amp;lt;int,&amp;nbsp;double,&amp;nbsp;std::less&amp;lt;int&amp;gt;&amp;nbsp;&amp;gt;&amp;nbsp;mmid;&lt;br />mmid&amp;nbsp;pairs;&lt;br />pairs.insert(mmid::value_type(15,&amp;nbsp;2.7)&amp;nbsp;);&lt;br />for(mmid::const_iterator&amp;nbsp;iter&amp;nbsp;=&amp;nbsp;pairs.begin();&amp;nbsp;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;iter&amp;nbsp;!=&amp;nbsp;pairs.end();&amp;nbsp;++iter)&lt;br />&amp;nbsp;&amp;nbsp;cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;iter-&amp;gt;first&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;'\t'&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;iter-&amp;gt;second&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;'\n';&lt;br />pairs[25]=45.65;&lt;/font>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;a name="h2161-1">&lt;/a>&lt;h5>Адаптеры контейнеров&lt;/h5>
STL&amp;nbsp;предоставляет три&amp;nbsp;адаптера контейнера &amp;ndash; stack, queue, priority_queue. Адаптеры не&amp;nbsp;являются контейнерами первого класса, поскольку они&amp;nbsp;не&amp;nbsp;предоставляют реализации фактической структуры данных в&amp;nbsp;которой могут сохраняться элементы, и&amp;nbsp;поскольку адаптеры не&amp;nbsp;поддерживают итераторы. Все&amp;nbsp;три класса адаптеров предоставляют функции-члены push и&amp;nbsp;pop, которые реализуют соответствующий метод вставки элемента. &lt;br />
Адаптер stack обеспечивает структуру LIFO и&amp;nbsp;может быть реализован с&amp;nbsp;любым из&amp;nbsp;контейнеров последовательности. Адаптер queue обеспечивает структуру FIFO и&amp;nbsp;может быть реализован с&amp;nbsp;контейнерами list и&amp;nbsp;deque. Адаптер priority_queue обеспечивает очередь в&amp;nbsp;которой наиболее приоритетное значение всегда будет удаляться первым. priority_queue может быть реализован с&amp;nbsp;контейнерами vector и&amp;nbsp;deque. Сравнение элементов выполняется с&amp;nbsp;помощью функции-объекта less&amp;lt;T&amp;gt;. &lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;font color="#000000">
std::stack&amp;lt;int&amp;gt;&amp;nbsp;intDequeStack;&lt;br />std::stack&amp;lt;int,&amp;nbsp;std::vector&amp;lt;int&amp;gt;&amp;nbsp;&amp;gt;&amp;nbsp;intVectorStack;&lt;br />std::stack&amp;lt;int,&amp;nbsp;std::list&amp;lt;int&amp;gt;&amp;nbsp;&amp;gt;&amp;nbsp;intListStack;&lt;br />intDequeStack.push(23);&lt;br />intVectorStack.push(23);&lt;br />intListStack.push(34);&lt;/font>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;a name="h2161-2">&lt;/a>&lt;h4>2.8.2 Итераторы&lt;/h4>
Итераторы схожи с&amp;nbsp;указателями и&amp;nbsp;используются для&amp;nbsp;указания на&amp;nbsp;элементы контейнеров первого класса. STL&amp;nbsp;контейнеры первого класса предоставляют функции-члены begin() и&amp;nbsp;end(), которые возвращают итератор указывающий соответственно на&amp;nbsp;первый и&amp;nbsp;последний элемент контейнера. Если итератор i&amp;nbsp;указывает на&amp;nbsp;определённый элемент, то&amp;nbsp;++i указывает на&amp;nbsp;&amp;laquo;следующий&amp;raquo; элемент, а&amp;nbsp;*i ссылается на&amp;nbsp;элемент, на&amp;nbsp;который указывает i. Итератор, полученый из&amp;nbsp;функции end(), может использоваться в&amp;nbsp;сравнении на&amp;nbsp;равенство и&amp;nbsp;неравенство для&amp;nbsp;определения окончания &amp;laquo;движущегося итератора&amp;raquo;. Для&amp;nbsp;ссылки на&amp;nbsp;элемент контейнера используется объект типа iterator или&amp;nbsp;const_iterator. &lt;br />
Таблица 13. &lt;strong>Операции с&amp;nbsp;итераторами для&amp;nbsp;каждого типа итератора&lt;/strong>&lt;br />
||&lt;div style="float:center; text-align:center">&lt;strong>Все итераторы&lt;/strong>&lt;/div>||&lt;br />
||++p|Преинкримент итератора||&lt;br />
||p++|Постинкримент итератора||&lt;br />
||&lt;div style="float:center; text-align:center">&lt;strong>Итераторы ввода&lt;/strong>&lt;/div>||&lt;br />
||*p|Разыменование итератора||&lt;br />
||p=p1|Присвоение итератора итератору||&lt;br />
||p==p1|Сравнение итераторов на&amp;nbsp;равенство||&lt;br />
||p!=p1|Сравнение итераторов на&amp;nbsp;неравенство||&lt;br />
||&lt;div style="float:center; text-align:center">&lt;strong>Итераторы вывода&lt;/strong>&lt;/div>||&lt;br />
||*p|Разыменование итератора||&lt;br />
||p=p1|Присвоение итератора итератору||&lt;br />
||&lt;div style="float:center; text-align:center">&lt;strong>Однонаправленные итераторы&lt;/strong>&lt;/div>||&lt;br />
||*|Обеспечивают все&amp;nbsp;функциональные возможности итераторов ввода и&amp;nbsp;вывода||&lt;br />
||&lt;div style="float:center; text-align:center">&lt;strong>Двунаправленные итераторы&lt;/strong>&lt;/div>||&lt;br />
||-p|Предекремент итератора||&lt;br />
||p-|Постдекремент итератора||&lt;br />
||&lt;div style="float:center; text-align:center">&lt;strong>Итераторы с&amp;nbsp;произвольным доступом&lt;/strong>&lt;/div>||&lt;br />
||p+=i|Инкремент итератора p&amp;nbsp;на i&amp;nbsp;позиций||&lt;br />
||p-=i|Декремент итератора p&amp;nbsp;на i&amp;nbsp;позиций||&lt;br />
||p+i|Итератор помещается на&amp;nbsp;позицию p+i||&lt;br />
||p-i|Итератор помещается на&amp;nbsp;позицию p-i||&lt;br />
||p[i]|Возвращение ссылку на&amp;nbsp;элемент, смещённый от&amp;nbsp;p на&amp;nbsp;i позиций||&lt;br />
||p&amp;lt;p1, p&amp;lt;=p1, p&amp;gt;p1, p&amp;gt;=p1|Сравнение итераторов||&lt;br />
Категории итераторов: &lt;br />
&lt;ul>&lt;li> input &amp;ndash; Используется для&amp;nbsp;чтения элементов из&amp;nbsp;контейнера. Итератор для&amp;nbsp;чтения может перемещаться только по&amp;nbsp;направлению вперёд и&amp;nbsp;поддерживает только однопроходные алгоритмы.
&lt;/li>&lt;li> output &amp;ndash; Используется для&amp;nbsp;записи элемента в&amp;nbsp;контейнер. Итератор для&amp;nbsp;записи может перемещаться только по&amp;nbsp;направлению вперёд и&amp;nbsp;поддерживает только однопроходные алгоритмы.
&lt;/li>&lt;li> forward &amp;ndash; Объединяет возможности итераторов для&amp;nbsp;чтения и&amp;nbsp;для записи и&amp;nbsp;сохраняет их&amp;nbsp;позицию в&amp;nbsp;контейнере.
&lt;/li>&lt;li> bidirectional &amp;ndash; Объединяет возможности однонаправленного итератора с&amp;nbsp;возможностью перемещаться в&amp;nbsp;обратном направлении.
&lt;/li>&lt;li> random access &amp;ndash; Объединяет возможности двунаправленного итератора с&amp;nbsp;возможностью прямого доступа к&amp;nbsp;любому элементу контейнера.&lt;/li>&lt;/ul>
Категория итератора, поддерживаемая каждым контейнером, определяет, может ли&amp;nbsp;этот контейнер использоваться со&amp;nbsp;специфическими алгоритмами в&amp;nbsp;STL.&lt;a name="h2161-3">&lt;/a>&lt;h4>2.8.3 Алгоритмы&lt;/h4>
Контейнеры инкапсулируют некоторые базовые операции, но&amp;nbsp;STL-алгоритмы реализуются независимо от&amp;nbsp;контейнеров. Алгоритмы оперируют элементами контейнеров только с&amp;nbsp;помощью итераторов. Можно создавать собственные алгоритмы.&lt;a name="h2161-4">&lt;/a>&lt;h5>Алгоритмы, модифицирующие последовательности&lt;/h5>
&lt;strong>copy&lt;/strong>&lt;br />
&lt;em>copy();&lt;/em>&lt;br />
Копирование.&lt;br />
&lt;strong>copy_backward&lt;/strong>&lt;br />
&lt;em>_BidirectionalIter2 __copy_backward(_BidirectionalIter1 first, _BidirectionalIter1 last, _BidirectionalIter2 result, bidirectional_iterator_tag, _Distance*)&lt;/em>&lt;br />
Обратное копирование части одного контейнера в&amp;nbsp;другой контейнер. &lt;br />
&lt;strong>fill&lt;/strong>&lt;br />
&lt;em>void fill(_ForwardIter first, _ForwardIter last, const _Tp&amp; value);&lt;/em>&lt;br />
Заполняет все&amp;nbsp;элементы контейнера значением &amp;lt;value&amp;gt;. &lt;br />
&lt;strong>fill_n&lt;/strong>&lt;br />
&lt;em>_OutputIter fill_n(_OutputIter first, _Size n, const _Tp&amp; value);&lt;/em>&lt;br />
Заполняет указанные элементы контейнера значением &amp;lt;value&amp;gt;. &lt;br />
&lt;strong>generate&lt;/strong>&lt;br />
&lt;em>void generate(_ForwardIter first, _ForwardIter last, _Generator gen)&lt;/em>&lt;br />
Заполняет все&amp;nbsp;элементы контейнера значением возвращаемым функцией &amp;lt;gen&amp;gt;. &lt;br />
&lt;strong>generate_n&lt;/strong>&lt;br />
&lt;em>generate_n();&lt;/em>&lt;br />
Заполняет указанные элементы контейнера значением возвращаемым функцией &amp;lt;gen&amp;gt;. &lt;br />
&lt;strong>iter_swap&lt;/strong>&lt;br />
&lt;em>void iter_swap(_ForwardIter1 a, _ForwardIter2 b);&lt;/em>&lt;br />
Перестановка значений контейнера (по ссылке). &lt;br />
&lt;strong>includes&lt;/strong>&lt;br />
&lt;em>bool includes(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2);&lt;/em>&lt;br />
Проверяет находятся ли&amp;nbsp;элементы второго множества в&amp;nbsp;первом. &lt;br />
&lt;strong>next_permutation&lt;/strong>&lt;br />
&lt;em>bool next_permutation(_BidirectionalIter first, _BidirectionalIter last);&lt;/em>&lt;br />
Следующая перестановка в&amp;nbsp;лексикографическом порядке. &lt;br />
&lt;strong>prev_permutation&lt;/strong>&lt;br />
&lt;em>bool prev_permutation(_BidirectionalIter first, _BidirectionalIter last);&lt;/em>&lt;br />
Предыдущая перестановка в&amp;nbsp;лексикографическом порядке. &lt;br />
&lt;strong>partition&lt;/strong>&lt;br />
&lt;em>_ForwardIter partition(_ForwardIter first, _ForwardIter last, _Predicate pred);&lt;/em>&lt;br />
Разделение диапазонов элементов. &lt;br />
&lt;strong>remove&lt;/strong>&lt;br />
&lt;em>_ForwardIter remove(_ForwardIter first, _ForwardIter last, const _Tp&amp; value);&lt;/em>&lt;br />
Удаление из&amp;nbsp;указанного участка контейнера всех указанных объектов &amp;lt;value&amp;gt; &lt;br />
&lt;strong>remove_copy&lt;/strong>&lt;br />
&lt;em>_OutputIter remove_copy(_InputIter first, _InputIter last, _OutputIter result, const _Tp&amp; value);&lt;/em>&lt;br />
Перенос из&amp;nbsp;указанного участка контейнера в&amp;nbsp;другой контейнер всех указанных объектов &amp;lt;value&amp;gt;. &lt;br />
&lt;strong>remove_copy_if&lt;/strong>&lt;br />
&lt;em>remove_copy_if();&lt;/em>&lt;br />
Перенос из&amp;nbsp;указанного участка контейнера в&amp;nbsp;другой контейнер объектов выбранных функцией сравнения &amp;lt;pred&amp;gt;. &lt;br />
&lt;strong>remove_if&lt;/strong>&lt;br />
&lt;em>_ForwardIter remove_if(_ForwardIter first, _ForwardIter last, _Predicate pred);&lt;/em>&lt;br />
Удаление из&amp;nbsp;указанного участка контейнера объектов выбранных функцией сравнения &amp;lt;pred&amp;gt; &lt;br />
&lt;strong>replace&lt;/strong>&lt;br />
&lt;em>void replace(_ForwardIter first, _ForwardIter last, const _Tp&amp; old_value, const _Tp&amp; new_value);&lt;/em>&lt;br />
Производит замену объекта &amp;lt;old_value&amp;gt; на&amp;nbsp;&amp;lt;new_value&amp;gt; по&amp;nbsp;указанному участку контейнера. &lt;br />
&lt;strong>replace_copy&lt;/strong>&lt;br />
&lt;em>_OutputIter replace_copy(_InputIter first, _InputIter last, _OutputIter result, const _Tp&amp; old_value, const _Tp&amp; new_value);&lt;/em>&lt;br />
Производит замену объекта &amp;lt;old_value&amp;gt; на&amp;nbsp;&amp;lt;new_value&amp;gt; по&amp;nbsp;указанному участку контейнера и&amp;nbsp;помещений старых значений в&amp;nbsp;контейнер &amp;lt;result&amp;gt;.&lt;br />
&lt;strong>replace_copy_if&lt;/strong>&lt;br />
&lt;em>_OutputIter replace_copy_if(Iterator first, Iterator last, _OutputIter result, _Predicate pred, const _Tp&amp; new_value);&lt;/em>&lt;br />
Производит замену объекта выбраного функцией &amp;lt;pred&amp;gt; на&amp;nbsp;&amp;lt;new_value&amp;gt; по&amp;nbsp;указанному участку контейнера и&amp;nbsp;помещений старых значений в&amp;nbsp;контейнер &amp;lt;result&amp;gt;. &lt;br />
&lt;strong>replace_if&lt;/strong>&lt;br />
&lt;em>void replace_if(_ForwardIter __first, _ForwardIter last, _Predicate pred, const _Tp&amp; new_value);&lt;/em>&lt;br />
Производит замену объекта выбраного функцией &amp;lt;pred&amp;gt; на&amp;nbsp;&amp;lt;new_value&amp;gt; по&amp;nbsp;указанному участку контейнера. &lt;br />
&lt;strong>reverse&lt;/strong>&lt;br />
&lt;em>void reverse(_BidirectionalIter first, _BidirectionalIter last, bidirectional_iterator_tag);&lt;/em>&lt;br />
Инвертирование последовательности указанных элементов контейнера./ &lt;br />
&lt;strong>reverse_copy&lt;/strong>&lt;br />
&lt;em>_OutputIter reverse_copy(_BidirectionalIter first, _BidirectionalIter last, _OutputIter result);&lt;/em>&lt;br />
Копирует указанные элементы в&amp;nbsp;обратном порядке. &lt;br />
&lt;strong>rotate&lt;/strong>&lt;br />
&lt;em>_ForwardIter rotate(_ForwardIter first, _ForwardIter middle, _ForwardIter last);&lt;/em>&lt;br />
Ротация элементов. &lt;br />
&lt;strong>rotate_copy&lt;/strong>&lt;br />
&lt;em>_OutputIter rotate_copy(_ForwardIter first, _ForwardIter middle, _ForwardIter last, _OutputIter result);&lt;/em>&lt;br />
Ротация элементов с&amp;nbsp;копированием. &lt;br />
&lt;strong>set_difference&lt;/strong>&lt;br />
&lt;em>_OutputIter set_difference(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2, _OutputIter result);&lt;/em>&lt;br />
Определение элементов из&amp;nbsp;первого множества отсутствующих во&amp;nbsp;втором. &lt;br />
&lt;strong>set_intersection&lt;/strong>&lt;br />
&lt;em>_OutputIter set_intersection(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2, _OutputIter result);&lt;/em>&lt;br />
Определение элементов из&amp;nbsp;первого множества присутствующих во&amp;nbsp;втором. &lt;br />
&lt;strong>set_symmetric_difference&lt;/strong>&lt;br />
&lt;em>_OutputIter set_symmetric_difference(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2, _OutputIter result);&lt;/em>&lt;br />
Определение элементов из&amp;nbsp;первого множества отсутствующих во&amp;nbsp;втором и&amp;nbsp;элементов второго отсутствующих в&amp;nbsp;первом. &lt;br />
&lt;strong>set_union&lt;/strong>&lt;br />
&lt;em>_OutputIter set_union(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2, _OutputIter result);&lt;/em>&lt;br />
Создаёт множество отсортированных элементов их&amp;nbsp;двух контейнеров в&amp;nbsp;третьем. &lt;br />
&lt;strong>stable_partition&lt;/strong>&lt;br />
&lt;em>_ForwardIter stable_partition(_ForwardIter first, _ForwardIter last, _Predicate pred);&lt;/em>&lt;br />
Подобна partition. &lt;br />
&lt;strong>swap&lt;/strong>&lt;br />
&lt;em>void swap(_Tp&amp; a, _Tp&amp; b);&lt;/em>&lt;br />
Перестановка значений контейнера. &lt;br />
&lt;strong>swap_ranges&lt;/strong>&lt;br />
&lt;em>_ForwardIter2 swap_ranges(_ForwardIter1 first1, _ForwardIter1 last1, _ForwardIter2 first2);&lt;/em>&lt;br />
Перестановка группы элементов контейнера. &lt;br />
&lt;strong>transform&lt;/strong>&lt;br />
&lt;em>transform();&lt;/em>&lt;br />
-//- &lt;br />
&lt;strong>unique&lt;/strong>&lt;br />
&lt;em>_ForwardIter unique(_ForwardIter first, _ForwardIter last);&lt;/em>&lt;br />
Удаляет из&amp;nbsp;контейнера одинаковые элементы &lt;br />
&lt;strong>unique_copy&lt;/strong>&lt;br />
&lt;em>_OutputIter unique_copy(_InputIter first, _InputIter last, _OutputIter result, _Tp*);&lt;/em>&lt;br />
Копирует все&amp;nbsp;уникальные элементы в&amp;nbsp;другой контейнер. &lt;a name="h2161-5">&lt;/a>&lt;h5>Алгоритмы, не&amp;nbsp;модифицирующие последовательности&lt;/h5>
&lt;strong>adjacent_find&lt;/strong>&lt;br />
&lt;em>_ForwardIter adjacent_find(_ForwardIter first, _ForwardIter last, _BinaryPredicate binary_pred);&lt;/em>&lt;br />
Возвращает итератор для&amp;nbsp;чтения, указывающий на&amp;nbsp;первый из&amp;nbsp;двух идентичных смежных элементов в&amp;nbsp;последовательности. &lt;br />
&lt;strong>equal&lt;/strong>&lt;br />
&lt;em>inline bool equal(_InputIter1 first1, _InputIter1 last1,_InputIter2 first2);&lt;/em>&lt;br />
Сравнение указанных участков двух контейнеров. &lt;br />
&lt;strong>find&lt;/strong>&lt;br />
&lt;em>_InputIter find(_InputIter first, _InputIter last, const _Tp&amp; val, input_iterator_tag);&lt;/em>&lt;br />
Возвращает положение искомого значения &amp;lt;val&amp;gt; &lt;br />
&lt;strong>find_each&lt;/strong>&lt;br />
&lt;em>find_each();&lt;/em>&lt;br />
-//- &lt;br />
&lt;strong>find_end&lt;/strong>&lt;br />
&lt;em>find_end();&lt;/em>&lt;br />
-//- &lt;br />
&lt;strong>find_first_of&lt;/strong>&lt;br />
&lt;em>find_first_of();&lt;/em>&lt;br />
-//- &lt;br />
&lt;strong>find_if&lt;/strong>&lt;br />
&lt;em>InputIter find_if(_InputIter first, _InputIter last, _Predicate pred, input_iterator_tag);&lt;/em>&lt;br />
Возвращает положение значения определённого функцией &amp;lt;pred&amp;gt;. &lt;br />
&lt;strong>lexicographical_compare&lt;/strong>&lt;br />
&lt;em>bool lexicographical_compare(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2);&lt;/em>&lt;br />
Используется для&amp;nbsp;лексикографического сравнения двух массивов символов. &lt;br />
&lt;strong>max&lt;/strong>&lt;br />
&lt;em>const _Tp&amp; max(const _Tp&amp; a, const _Tp&amp; b);&lt;/em>&lt;br />
Определение максимального значения. &lt;br />
&lt;strong>min&lt;/strong>&lt;br />
&lt;em>const _Tp&amp; min(const _Tp&amp; a, const _Tp&amp; b);&lt;/em>&lt;br />
Определения минимального значения. &lt;br />
&lt;strong>mismatch&lt;/strong>&lt;br />
&lt;em>pair&amp;lt;_InputIter1, _InputIter2&amp;gt; mismatch(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2);&lt;/em>&lt;br />
Выполняет сравнение указанных участков двух контейнеров и&amp;nbsp;возвращает пару итераторов указывающих различные позиции контейнеров. &lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;font color="#000000">
std::pair&amp;lt;std::vector&amp;lt;int&amp;gt;::iterator,&amp;nbsp;std::vector&amp;lt;int&amp;gt;::iterator&amp;gt;&amp;nbsp;location;&amp;nbsp;&lt;br />location&amp;nbsp;=&amp;nbsp;std::mismatch(v1.begin(),v1.end(),v3.begin());&lt;/font>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
&lt;strong>search&lt;/strong>&lt;br />
&lt;em>search();&lt;/em>&lt;br />
-//- &lt;br />
&lt;strong>search_n&lt;/strong>&lt;br />
&lt;em>search_n();&lt;/em>&lt;br />
-//- &lt;a name="h2161-6">&lt;/a>&lt;h5>Числовые алгоритмы &amp;lt;numeric&amp;gt;&lt;/h5>
&lt;strong>accumulate&lt;/strong>&lt;br />
&lt;em>_Tp accumulate(_InputIterator first, _InputIterator last, _Tp init);&lt;/em>&lt;br />
Суммирование значений указанной области контейнера. &lt;br />
&lt;strong>adjacent_difference&lt;/strong>&lt;br />
&lt;em>_OutputIterator adjacent_difference(_InputIterator first, _InputIterator last, _OutputIterator result);&lt;/em>&lt;br />
Вычисление разницы между парой смежных элементов &lt;br />
&lt;strong>count&lt;/strong>&lt;br />
&lt;em>void count(_InputIter first, _InputIter last, const _Tp&amp; value,_Size&amp; n);&lt;/em>&lt;br />
Выполняет подсчет количества объектов &amp;lt;value&amp;gt; в&amp;nbsp;указанной области контейнера. &lt;br />
&lt;strong>count_if&lt;/strong>&lt;br />
&lt;em>void count_if(_InputIter first, _InputIter last, _Predicate pred, _Size&amp; n);&lt;/em>&lt;br />
Выполняет подсчет количества объектов выбранных функцией &amp;lt;pred&amp;gt; в&amp;nbsp;указанной области контейнера. &lt;br />
&lt;strong>for_each&lt;/strong>&lt;br />
&lt;em>_Function for_each(_InputIter first, _InputIter last, _Function f);&lt;/em>&lt;br />
Применение функции &amp;lt;f&amp;gt; к&amp;nbsp;указанным элементам контейнера. Общая функция должна принимать текущий элемент в&amp;nbsp;качестве аргумента и&amp;nbsp;не должна модифицировать этот элемент. &lt;br />
&lt;strong>inner_product&lt;/strong>&lt;br />
&lt;em>_Tp inner_product(_InputIterator1 first1, _InputIterator1 last1, _InputIterator2 first2, _Tp init);&lt;/em>&lt;br />
Вычисление суммы произведений двух последовательностей. &lt;br />
&lt;strong>max_element&lt;/strong>&lt;br />
&lt;em>_ForwardIter max_element(_ForwardIter first, _ForwardIter last);&lt;/em>&lt;br />
Возвращает указатель на&amp;nbsp;максимальный элемент в&amp;nbsp;контейнере. &lt;br />
&lt;strong>min_element&lt;/strong>&lt;br />
&lt;em>_ForwardIter min_element(_ForwardIter first, _ForwardIter last);&lt;/em>&lt;br />
Возвращает указатель на&amp;nbsp;минимальный элемент в&amp;nbsp;контейнере. &lt;br />
&lt;strong>nth_element&lt;/strong>&lt;br />
&lt;em>void nth_element(_RandomAccessIter first, _RandomAccessIter nth, _RandomAccessIter last);&lt;/em>&lt;br />
Разделение диапазонов элементов. &lt;br />
&lt;strong>partial_sum&lt;/strong>&lt;br />
&lt;em>_OutputIterator partial_sum(_InputIterator first, _InputIterator last, _OutputIterator result);&lt;/em>&lt;br />
Вычисление суммы элементов двух контейнеров с&amp;nbsp;накоплением. &lt;br />
&lt;strong>partial_sort&lt;/strong>&lt;br />
&lt;em>void partial_sort(_RandomAccessIter first, _RandomAccessIter middle, _RandomAccessIter last);&lt;/em>&lt;br />
Сортировка части последовательности. &lt;br />
&lt;strong>partial_sort_copy&lt;/strong>&lt;br />
&lt;em>_RandomAccessIter partial_sort_copy(_InputIter first, _InputIter last, _RandomAccessIter result_first, _RandomAccessIter result_last);&lt;/em>&lt;br />
Сортировка части последовательности с&amp;nbsp;копированием результата. &lt;br />
&lt;strong>random_shuffle&lt;/strong>&lt;br />
&lt;em>inline void random_shuffle(_RandomAccessIter first, _RandomAccessIter last);&lt;/em>&lt;br />
Располагает элементы указанного участка контейнера в&amp;nbsp;произвольном порядке. &lt;br />
&lt;strong>stable_sort&lt;/strong>&lt;br />
&lt;em>void stable_sort(_RandomAccessIter first, _RandomAccessIter last);&lt;/em>&lt;br />
Сортировка (аналогично sort) &lt;br />
&lt;strong>transform&lt;/strong>&lt;br />
&lt;em>_OutputIter transform(_InputIter first, _InputIter last, _OutputIter result, _UnaryOperation oper);&lt;/em>&lt;br />
Применение функции &amp;lt;f&amp;gt; к&amp;nbsp;указанным элементам контейнера. Общая функция должна принимать текущий элемент в&amp;nbsp;качестве аргумента, не&amp;nbsp;должна модифицировать этот элемент и&amp;nbsp;должна возвращать трансформированное значение. &lt;a name="h2161-7">&lt;/a>&lt;h5>Алгоритмы, сортировки кучи&lt;/h5>
&lt;strong>make_heap&lt;/strong>&lt;br />
&lt;em>make_heap(_RandomAccessIterator first, _RandomAccessIterator last);&lt;/em>&lt;br />
Создание и&amp;nbsp;инициализация кучи. &lt;br />
&lt;strong>pop_heap&lt;/strong>&lt;br />
&lt;em>void pop_heap(_RandomAccessIterator first, _RandomAccessIterator last);&lt;/em>&lt;br />
Удаление элемента с&amp;nbsp;вершины кучи. &lt;br />
&lt;strong>push_heap&lt;/strong>&lt;br />
&lt;em>void push_heap(_RandomAccessIterator first, _RandomAccessIterator last);&lt;/em>&lt;br />
Добавление нового элемента в&amp;nbsp;кучу. &lt;br />
&lt;strong>sort_heap&lt;/strong>&lt;br />
&lt;em>sort_heap(_RandomAccessIterator first, _RandomAccessIterator last, _Compare comp);&lt;/em>&lt;br />
Сортировка последовательности значений. &lt;a name="h2161-8">&lt;/a>&lt;h4>2.8.4 Класс &amp;lt;bitset&amp;gt;&lt;/h4>
Класс &lt;strong>bitset&lt;/strong> обеспечивает операции для&amp;nbsp;создания и&amp;nbsp;манипуляции наборами битов. Наборы битов имеют фиксированный размер: bitset&amp;lt;size&amp;gt; b;. Операции:&lt;br />
&lt;strong>set&lt;/strong>&lt;br />
Установка указанного бита. &lt;br />
&lt;strong>reset&lt;/strong>&lt;br />
Сброс указанного бита. &lt;br />
&lt;strong>flip&lt;/strong>&lt;br />
Переключает бит. &lt;br />
&lt;strong>at&lt;/strong>&lt;br />
Получить бит. &lt;br />
&lt;strong>test&lt;/strong>&lt;br />
Проверка бита. &lt;br />
&lt;strong>size&lt;/strong>&lt;br />
Возвращает число битов в&amp;nbsp;наборе. &lt;br />
&lt;strong>count&lt;/strong>&lt;br />
Возвращает число установленных битов. &lt;br />
&lt;strong>any&lt;/strong>&lt;br />
Возвращает true если хоть один бит&amp;nbsp;в&amp;nbsp;наборе установлен. &lt;br />
&lt;strong>none&lt;/strong>&lt;br />
Возвращает true если не&amp;nbsp;один бит&amp;nbsp;в&amp;nbsp;наборе неустановлен. &lt;br />
&lt;strong>==, !=&lt;/strong>&lt;br />
Сравнение наборов битов. &lt;br />
&lt;strong>&amp;=, |=, ^ =, &amp;gt;&amp;gt;=, &amp;lt;&amp;lt;=&lt;/strong>&lt;br />
Битовые операции над&amp;nbsp;наборами битов. &lt;br />
&lt;strong>to_string&lt;/strong>&lt;br />
Преобразует набор битов в&amp;nbsp;строку. &lt;br />
&lt;strong>to_ulong&lt;/strong>&lt;br />
Преобразует набор битов в&amp;nbsp;unsigned long. &lt;a name="h2161-9">&lt;/a>&lt;h4>2.8.5 Объекты-функции&lt;/h4>
Объекты-функции и&amp;nbsp;адаптеры-функций предназначены для&amp;nbsp;того чтобы сделать STL&amp;nbsp;более гибкой. Объект-функция содержит функцию, которая может быть интерпретирована с&amp;nbsp;синтаксической и&amp;nbsp;семантической точки зрения как&amp;nbsp;функция, использующая operator(). Объекты-функции STL:&lt;br />
&lt;strong>divides&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; арифметический;&lt;br />
&lt;strong>equal_to&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; реляционный; &lt;br />
&lt;strong>greater&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; реляционный;&lt;br />
&lt;strong>greater_equal&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; реляционный;&lt;br />
&lt;strong>less&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; реляционный;&lt;br />
&lt;strong>less_equal&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; реляционный; &lt;br />
&lt;strong>logical_and&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; логический; &lt;br />
&lt;strong>logical_not&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; логический; &lt;br />
&lt;strong>logical_or&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; логический; &lt;br />
&lt;strong>minus&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; арифметический; &lt;br />
&lt;strong>moduls&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; арифметический; &lt;br />
&lt;strong>negate&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; арифметический; &lt;br />
&lt;strong>not_equal_to&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; реляционный; &lt;br />
&lt;strong>plus&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; арифметический; &lt;br />
&lt;strong>multiplies&amp;lt;T&amp;gt;&lt;/strong> &amp;ndash; арифметический;&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2007-03-30 21:49:35</title>
<link>http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8/show?time=2007-03-30+21%3A49%3A35</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8&amp;" class="">/Статьи&amp;nbsp;/&amp;nbsp;Кратко&amp;nbsp;Обо&amp;nbsp;Всём&amp;nbsp;/&amp;nbsp;Clang&amp;nbsp;/&amp;nbsp;part&amp;nbsp;2&amp;nbsp;/&amp;nbsp;part&amp;nbsp;8&lt;/a> за &lt;a href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8?time=2007-03-30+21%3A49%3A35">2007-03-30 21:49:35&lt;/a> и &lt;a href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8?time=2007-03-31+17%3A39%3A16">2007-03-31 17:39:16&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;a name="h2161-1">&lt;/a>&lt;h3>2.8 Стандартная библиотека шаблонов (STL)&lt;/h3>
STL&amp;nbsp;представляет собой большую библиотеку шаблонов включающую в&amp;nbsp;себя три&amp;nbsp;ключевых компонента: контейнеры, итераторы, алгоритмы. Кроме того, STL&amp;nbsp;является расширяемой библиотекой. STL&amp;nbsp;избегает операторов new&amp;nbsp;и&amp;nbsp;delete и&amp;nbsp;использует распределители памяти(allocators) для&amp;nbsp;выделения и&amp;nbsp;высвобождения памяти. Существует возможность создавать пользовательские распределители памяти. Типы исключений в&amp;nbsp;STL: &lt;br />
&lt;ul>&lt;li> bad_alloc &amp;ndash; неудачная попытка выделения области памяти.&lt;/li>&lt;/ul>&lt;a name="h2161-2">&lt;/a>&lt;h4>2.8.1 Контейнеры&lt;/h4>
Контейнеры делятся на&amp;nbsp;три основных категории: контейнеры последовательностей, ассоциативные контейнеры и&amp;nbsp;адаптеры контейнеров. Контейнеры последовательностей (sequence containers) и&amp;nbsp;Ассоциативные контейнеры имеют общее название &amp;ndash; контейнеры первого класса (first-class containers). Существует ещё четыре типа контейнеров, которые считаются &amp;laquo;почти контейнерами&amp;raquo; (&amp;laquo;near-containers&amp;raquo;) &amp;ndash; С-подобные массивы, string, bitset и&amp;nbsp;valarray.&lt;br />
Контейнерные заголовочные файлы стандартной библиотеки: &lt;br />
&lt;ul>&lt;li> &amp;lt;vector&amp;gt;&lt;/li>&lt;/ul>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">==(allocators) для&amp;nbsp;выделения и&amp;nbsp;высвобождения памяти. Существует возможность создавать пользовательские распределители памяти. Типы исключений в&amp;nbsp;STL:&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2007-03-30 21:49:03</title>
<link>http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8/show?time=2007-03-30+21%3A49%3A03</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8&amp;" class="">/Статьи&amp;nbsp;/&amp;nbsp;Кратко&amp;nbsp;Обо&amp;nbsp;Всём&amp;nbsp;/&amp;nbsp;Clang&amp;nbsp;/&amp;nbsp;part&amp;nbsp;2&amp;nbsp;/&amp;nbsp;part&amp;nbsp;8&lt;/a> за &lt;a href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8?time=2007-03-30+21%3A49%3A03">2007-03-30 21:49:03&lt;/a> и &lt;a href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8?time=2007-03-30+21%3A49%3A35">2007-03-30 21:49:35&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">==(allocators) для&amp;nbsp;выделения и&amp;nbsp;высвобождения памяти. Существует возможность создавать пользовательские распределители памяти. Типы исключений в&amp;nbsp;STL:&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;a name="h2161-1">&lt;/a>&lt;h3>2.8 Стандартная библиотека шаблонов (STL)&lt;/h3>
STL&amp;nbsp;представляет собой большую библиотеку шаблонов включающую в&amp;nbsp;себя три&amp;nbsp;ключевых компонента: контейнеры, итераторы, алгоритмы. Кроме того, STL&amp;nbsp;является расширяемой библиотекой. STL&amp;nbsp;избегает операторов new&amp;nbsp;и&amp;nbsp;delete и&amp;nbsp;использует распределители памяти(allocators) для&amp;nbsp;выделения и&amp;nbsp;высвобождения памяти. Существует возможность создавать пользовательские распределители памяти. Типы исключений в&amp;nbsp;STL:&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2007-01-12 18:33:58</title>
<link>http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8/show?time=2007-01-12+18%3A33%3A58</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8&amp;" class="">/Статьи&amp;nbsp;/&amp;nbsp;Кратко&amp;nbsp;Обо&amp;nbsp;Всём&amp;nbsp;/&amp;nbsp;Clang&amp;nbsp;/&amp;nbsp;part&amp;nbsp;2&amp;nbsp;/&amp;nbsp;part&amp;nbsp;8&lt;/a> за &lt;a href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8?time=2007-01-12+18%3A33%3A58">2007-01-12 18:33:58&lt;/a> и &lt;a href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8?time=2007-03-30+21%3A49%3A03">2007-03-30 21:49:03&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;ul>&lt;li> bad_alloc &amp;ndash; неудачная попытка выделения области памяти.&lt;/li>&lt;/ul>&lt;a name="h2161-1">&lt;/a>&lt;h4>2.8.1 Контейнеры&lt;/h4>
Контейнеры делятся на&amp;nbsp;три основных категории: контейнеры последовательностей, ассоциативные контейнеры и&amp;nbsp;адаптеры контейнеров. Контейнеры последовательностей (sequence containers) и&amp;nbsp;Ассоциативные контейнеры имеют общее название &amp;ndash; контейнеры первого класса (first-class containers). Существует ещё четыре типа контейнеров, которые считаются &amp;laquo;почти контейнерами&amp;raquo; (&amp;laquo;near-containers&amp;raquo;) &amp;ndash; С-подобные массивы, string, bitset и&amp;nbsp;valarray.&lt;br />
Контейнерные заголовочные файлы стандартной библиотеки: &lt;br />
&lt;ul>&lt;li> &amp;lt;vector&amp;gt;&lt;/li>&lt;/ul>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-05-30 18:38:56</title>
<link>http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8/show?time=2006-05-30+18%3A38%3A56</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8&amp;" class="">/Статьи&amp;nbsp;/&amp;nbsp;Кратко&amp;nbsp;Обо&amp;nbsp;Всём&amp;nbsp;/&amp;nbsp;Clang&amp;nbsp;/&amp;nbsp;part&amp;nbsp;2&amp;nbsp;/&amp;nbsp;part&amp;nbsp;8&lt;/a> за &lt;a href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8?time=2006-05-30+18%3A38%3A56">2006-05-30 18:38:56&lt;/a> и &lt;a href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8?time=2007-01-12+18%3A33%3A58">2007-01-12 18:33:58&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;em>InputIter find_if(_InputIter first, _InputIter last, _Predicate pred, input_iterator_tag);&lt;/em>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;em>&lt;span class="missingpage">Input&amp;nbsp;Iter&lt;/span>&lt;a href="http://freesource.info/wiki/InputIter/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a> find_if(_InputIter first, _InputIter last, _Predicate pred, input_iterator_tag);&lt;/em>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-05-30 18:37:59</title>
<link>http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8/show?time=2006-05-30+18%3A37%3A59</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8&amp;" class="">/Статьи&amp;nbsp;/&amp;nbsp;Кратко&amp;nbsp;Обо&amp;nbsp;Всём&amp;nbsp;/&amp;nbsp;Clang&amp;nbsp;/&amp;nbsp;part&amp;nbsp;2&amp;nbsp;/&amp;nbsp;part&amp;nbsp;8&lt;/a> за &lt;a href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8?time=2006-05-30+18%3A37%3A59">2006-05-30 18:37:59&lt;/a> и &lt;a href="http://freesource.info/wiki/Stat'i/KratkoOboVsjom/Clang/part2/part8?time=2006-05-30+18%3A38%3A56">2006-05-30 18:38:56&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;em>_OutputIter set_union(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2, _OutputIter result);&lt;/em>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;em>&lt;span class="missingpage">Output&amp;nbsp;Iter&lt;/span>&lt;a href="http://freesource.info/wiki/OutputIter/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a> set_union(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2, _OutputIter result);&lt;/em>&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>
