SlideShare a Scribd company logo
1 of 11
АЛГОРИТМЫ STL
Михаил Кройтор
Содержание
 Понятие алгоритма
 предикаты
 Имена алгоритмов в STL
 Алгоритмы, не изменяющие
последовательность
 Алгоритмы, изменяющие последовательность
Понятие алгоритма
 Алгоритм это …
Конечная последовательность действий,
приводящая к желаемому результату
Предикаты
 Предикатом называется функция,
возвращающая логическое значение
 Алгоритмы STL оперируют унарными и
бинарными предикатами.
Имена алгоритмов в STL
 Для некоторых алгоритмов существуют как
оперативные, так и копирующие версии. Для
алгоритма <algorithm> копирующая версия
называется <algorithm>_copy
 Для некоторых алгоритмов существуют
предикатные версии. Предикатная форма
алгоритма <algorithm> называется
<algorithm>_if
 Если у алгоритма <algorithm> существует
предикатная копирующая версия, она
называется <algorithm>_copy_if
Легенда
T тип элемента, хранящегося в
контейнере
IIter Input Iterator
OIter Output Iterator
FIter Forward Iterator
BIter Bidirectional Iterator
RAIter Random Access Iterator
Pred Функтор предикат
UPred Унарный предикат
BPred Бинарный предикат
Func Функтор Function
Алгоритмы, не изменяющие
последовательность
Алгоритм описание
template <class IIter, class Func>
Func for_each(IIter first, IIter last,
Func f);
Применяет к каждому значению
интервала [first, last) функцию f.
template <class IIter, class T>
IIter find(IIter first, IIter last, const T&
val);
template <class IIter, class UPred>
IIter find_if(IIter first, IIter last, UPred
pred);
Возвращает первый итератор из
диапазона [first, last), значение
которого равно val (*i == val).
Предикативная форма возвращает
первый итератор, соблюдающий
условие pred(*i) == true
template <class IIter, class T>
typename
iterator_traits<IIter>::difference_type
count (IIter first, IIter last, const T&
val);
template <class IIter, class Pred>
typename
iterator_traits<IIter>::difference_type
Подсчитывает в диапазоне [first, last)
количество элементов, равных val.
Есть предикатная форма.
Алгоритмы, не изменяющие
последовательность 2
Алгоритм Описание
template <class IIter1, class IIter2>
bool equal (IIter1 first1, IIter1 last1,
IIter2 first2);
template <class IIter1, class IIter2,
class BPred>
bool equal (IIter1 first1, IIter1 last1,
IIter2 first2, BPred pred);
Сравнивает интервалы [first1, last1) и
[first2, first2 +(last1-first1)). В случае
равенства возвращает true.
Предикатная форма имеет то же имя и
проверяет на выполнение условие
pred(*i1, *i2) == true, где i1 из [first1,
last1) и i2 из [first2, first2 +(last1-first1)).
template <class FIter1, class FIter2>
FIter1 search(FIter1 first1, FIter1
last1,
FIter2 first2, FIter2 last2);
template <class FIter1, class FIter2,
class BPred>
FIter1 search(FIter1 first1, FIter1
last1,
FIter2 first2, FIter2 last2, BPred
Алгоритм ищет интервал [first2, last2) в
интервале [first1, last1) и возвращает
позицию первого элемента, если
находит, last2 – если не находит.
Предикатная форма проверяет
подинтервал на удовлетворение
предикату.
Алгоритмы, изменяющие
последовательность
Алгоритм описание
template <class IIter, class OIter>
OIter copy(IIter first, IIter last, OIter
result);
template <class BIter1, class BIter2>
BIter2 copy_backward(BIter1 first,
BIter1 last, BIter2 result);
template <class IIter, class OIter, class
UPred>
OIter copy_if(IIter first, IIter last, OIter
result, UPred p);
Алгоритм, копирующий значения из
полуинтервала [first, last) в [result,
result + (last-first)). copy_backward
копирует элементы в обратном
порядке. copy_if копирует элементы,
удовлетворяющие условию p. Этот
алгоритм был введен в стандарте
С++11.
template <class T> void swap(T&
a,T& b);
template < class FIter1 , class FIter2>
FIter2 swap_ranges ( FIter1 first1,
FIter1 last1, FIter2 first2 );
template < class FIter1 , class FIter2>
void iter_swap ( FIter1 a , FIter2 b );
Алгоритм swap меняет значения двух
переменных местами. swap_ranges –
меняет местами значения двух
интервалов. iter_swap – меняет
местами значения двух итераторов.
Алгоритмы, изменяющие
последовательность 2
алгоритм описание
template < class FIter , class T>
void replace ( FIter first , FIter last ,
const T& old_value , const T&
new_value );
template < class FIter, class Pred,
class T>
void replace_if ( FIter first , FIter last ,
UPred pred , const T& new_value );
Заменяет old_value на new_value на
отрезке [first, last). Предикативная
форма заменяет все значения,
удовлетворяющие предикату.
template <class FIter, class T>
FIter remove (FIter first, FIter last,
const T& val);
template <class IIter, class OIter,
class T> OIter remove_copy (IIter
first, IIter last, OIter result, const T&
val);
template <class FIter, class UPred>
FIter remove_if (FIter first, FIter last,
Удаляет элементы из отрезка [first,
last), равные val.
Предикативная форма удаляет все
элементы, удовлетворяющие условию
pred.
Алгоритмы, изменяющие
последовательность 3
алгоритм описание
template <class FIter>
FIter unique (FIter first, FIter last);
template <class FIter, class BPred>
FIter unique (FIter first, FIter last,
BPred pred);
Удаляет все повторы на отрезке [first,
last).
Предикатная форма сравнивает элементы
из отрезка по функции сравнения pred
template <class FIter, class Generator>
void generate (FIter first, FIter last,
Generator gen);
Заполняет отрезок [first, last) значениями,
возвращаемыми gen
template <class IIter, class OIter, class
UOper>
OIter transform (IIter first, IIter last,
OIter result, UOper op);
template <class IIter, class IIter, class
OIter, class BOper>
OIter transform (IIter first1, IIter1 last1,
IIter2 first2, OIter result, BOper
binary_op);
Первая версия записывает в выходной
отрезок [result, result + (last-first))
значения op(*it) где it из отрезка [first,
last)
Вторая версия записывает в выходной
отрезок [result, result + (last1-first1))
значения op(*it1, *it2) где it1 из отрезка
[first1, last1), it2 из отрезка [first2,
first2+(last1-first1))

More Related Content

What's hot

Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Dima Dzuba
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Dima Dzuba
 
Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Stfalcon Meetups
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Dima Dzuba
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Dima Dzuba
 
Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияYandex
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
 
Субъекторная модель
Субъекторная модельСубъекторная модель
Субъекторная модельcorehard_by
 
5. java lecture io
5. java lecture io5. java lecture io
5. java lecture ioMERA_school
 
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияМихаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияYandex
 
Характерные черты функциональных языков программирования
Характерные черты функциональных языков программированияХарактерные черты функциональных языков программирования
Характерные черты функциональных языков программированияAlex.Kolonitsky
 
Функциональное программирование и Clojure
Функциональное программирование и ClojureФункциональное программирование и Clojure
Функциональное программирование и ClojureAnjLab
 
функции в Java script
функции в Java scriptфункции в Java script
функции в Java scriptViktor Andreev
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковSergey Platonov
 

What's hot (20)

PHP7 - что ожидать?
PHP7 - что ожидать?PHP7 - что ожидать?
PHP7 - что ожидать?
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
 
лек9 10
лек9 10лек9 10
лек9 10
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
 
Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Discovering Lambdas in Java 8
Discovering Lambdas in Java 8
 
Python. Обработка ошибок
Python. Обработка ошибокPython. Обработка ошибок
Python. Обработка ошибок
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8.
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6
 
Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знания
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализация
 
Субъекторная модель
Субъекторная модельСубъекторная модель
Субъекторная модель
 
5. java lecture io
5. java lecture io5. java lecture io
5. java lecture io
 
Подпрограммы
ПодпрограммыПодпрограммы
Подпрограммы
 
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияМихаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знания
 
Stream API
Stream APIStream API
Stream API
 
Характерные черты функциональных языков программирования
Характерные черты функциональных языков программированияХарактерные черты функциональных языков программирования
Характерные черты функциональных языков программирования
 
Функциональное программирование и Clojure
Функциональное программирование и ClojureФункциональное программирование и Clojure
Функциональное программирование и Clojure
 
функции в Java script
функции в Java scriptфункции в Java script
функции в Java script
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
 

Similar to алгоритмы stl

Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
 
C++ осень 2012 лекция 5
C++ осень 2012 лекция 5C++ осень 2012 лекция 5
C++ осень 2012 лекция 5Technopark
 
6.4 Ещё о шаблонах
6.4 Ещё о шаблонах6.4 Ещё о шаблонах
6.4 Ещё о шаблонахDEVTYPE
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.Igor Shkulipa
 
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Roman Orlov
 
основы Java переменные, циклы
основы Java   переменные, циклыосновы Java   переменные, циклы
основы Java переменные, циклыSergey Nemchinsky
 
Основы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторыОсновы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторыTheoretical mechanics department
 
03_JavaBasicConstructionsAndDatatypes
03_JavaBasicConstructionsAndDatatypes03_JavaBasicConstructionsAndDatatypes
03_JavaBasicConstructionsAndDatatypesdklenov
 

Similar to алгоритмы stl (13)

Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
 
Java. Методы
Java. Методы Java. Методы
Java. Методы
 
C++ осень 2012 лекция 5
C++ осень 2012 лекция 5C++ осень 2012 лекция 5
C++ осень 2012 лекция 5
 
десант презентация
десант презентациядесант презентация
десант презентация
 
02 if for
02 if for02 if for
02 if for
 
6.4 Ещё о шаблонах
6.4 Ещё о шаблонах6.4 Ещё о шаблонах
6.4 Ещё о шаблонах
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.
 
Scala lecture #4
Scala lecture #4Scala lecture #4
Scala lecture #4
 
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
 
основы Java переменные, циклы
основы Java   переменные, циклыосновы Java   переменные, циклы
основы Java переменные, циклы
 
Основы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторыОсновы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторы
 
03_JavaBasicConstructionsAndDatatypes
03_JavaBasicConstructionsAndDatatypes03_JavaBasicConstructionsAndDatatypes
03_JavaBasicConstructionsAndDatatypes
 
Рекурсия. Поиск
Рекурсия. ПоискРекурсия. Поиск
Рекурсия. Поиск
 

More from mcroitor

09 server mgmt_ii_ro
09 server mgmt_ii_ro09 server mgmt_ii_ro
09 server mgmt_ii_romcroitor
 
09 server mgmt_ii_ru
09 server mgmt_ii_ru09 server mgmt_ii_ru
09 server mgmt_ii_rumcroitor
 
10 server security_ro
10 server security_ro10 server security_ro
10 server security_romcroitor
 
10 server security_ru
10 server security_ru10 server security_ru
10 server security_rumcroitor
 
08 server mgmt_ro
08 server mgmt_ro08 server mgmt_ro
08 server mgmt_romcroitor
 
08 server mgmt_ru
08 server mgmt_ru08 server mgmt_ru
08 server mgmt_rumcroitor
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_rumcroitor
 
07 virtual hosts_ro
07 virtual hosts_ro07 virtual hosts_ro
07 virtual hosts_romcroitor
 
06 php instalation_ro
06 php instalation_ro06 php instalation_ro
06 php instalation_romcroitor
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_rumcroitor
 
05 db server_deployment_ro
05 db server_deployment_ro05 db server_deployment_ro
05 db server_deployment_romcroitor
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_rumcroitor
 
04 web server_deployment_ro
04 web server_deployment_ro04 web server_deployment_ro
04 web server_deployment_romcroitor
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_rumcroitor
 
03 web server_architecture_ro
03 web server_architecture_ro03 web server_architecture_ro
03 web server_architecture_romcroitor
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_rumcroitor
 
02 server hardware_ro
02 server hardware_ro02 server hardware_ro
02 server hardware_romcroitor
 
02 server hardware_ru
02 server hardware_ru02 server hardware_ru
02 server hardware_rumcroitor
 
01 server definition_ro
01 server definition_ro01 server definition_ro
01 server definition_romcroitor
 
01 server definition
01 server definition01 server definition
01 server definitionmcroitor
 

More from mcroitor (20)

09 server mgmt_ii_ro
09 server mgmt_ii_ro09 server mgmt_ii_ro
09 server mgmt_ii_ro
 
09 server mgmt_ii_ru
09 server mgmt_ii_ru09 server mgmt_ii_ru
09 server mgmt_ii_ru
 
10 server security_ro
10 server security_ro10 server security_ro
10 server security_ro
 
10 server security_ru
10 server security_ru10 server security_ru
10 server security_ru
 
08 server mgmt_ro
08 server mgmt_ro08 server mgmt_ro
08 server mgmt_ro
 
08 server mgmt_ru
08 server mgmt_ru08 server mgmt_ru
08 server mgmt_ru
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_ru
 
07 virtual hosts_ro
07 virtual hosts_ro07 virtual hosts_ro
07 virtual hosts_ro
 
06 php instalation_ro
06 php instalation_ro06 php instalation_ro
06 php instalation_ro
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_ru
 
05 db server_deployment_ro
05 db server_deployment_ro05 db server_deployment_ro
05 db server_deployment_ro
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_ru
 
04 web server_deployment_ro
04 web server_deployment_ro04 web server_deployment_ro
04 web server_deployment_ro
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_ru
 
03 web server_architecture_ro
03 web server_architecture_ro03 web server_architecture_ro
03 web server_architecture_ro
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_ru
 
02 server hardware_ro
02 server hardware_ro02 server hardware_ro
02 server hardware_ro
 
02 server hardware_ru
02 server hardware_ru02 server hardware_ru
02 server hardware_ru
 
01 server definition_ro
01 server definition_ro01 server definition_ro
01 server definition_ro
 
01 server definition
01 server definition01 server definition
01 server definition
 

алгоритмы stl

  • 2. Содержание  Понятие алгоритма  предикаты  Имена алгоритмов в STL  Алгоритмы, не изменяющие последовательность  Алгоритмы, изменяющие последовательность
  • 3. Понятие алгоритма  Алгоритм это … Конечная последовательность действий, приводящая к желаемому результату
  • 4. Предикаты  Предикатом называется функция, возвращающая логическое значение  Алгоритмы STL оперируют унарными и бинарными предикатами.
  • 5. Имена алгоритмов в STL  Для некоторых алгоритмов существуют как оперативные, так и копирующие версии. Для алгоритма <algorithm> копирующая версия называется <algorithm>_copy  Для некоторых алгоритмов существуют предикатные версии. Предикатная форма алгоритма <algorithm> называется <algorithm>_if  Если у алгоритма <algorithm> существует предикатная копирующая версия, она называется <algorithm>_copy_if
  • 6. Легенда T тип элемента, хранящегося в контейнере IIter Input Iterator OIter Output Iterator FIter Forward Iterator BIter Bidirectional Iterator RAIter Random Access Iterator Pred Функтор предикат UPred Унарный предикат BPred Бинарный предикат Func Функтор Function
  • 7. Алгоритмы, не изменяющие последовательность Алгоритм описание template <class IIter, class Func> Func for_each(IIter first, IIter last, Func f); Применяет к каждому значению интервала [first, last) функцию f. template <class IIter, class T> IIter find(IIter first, IIter last, const T& val); template <class IIter, class UPred> IIter find_if(IIter first, IIter last, UPred pred); Возвращает первый итератор из диапазона [first, last), значение которого равно val (*i == val). Предикативная форма возвращает первый итератор, соблюдающий условие pred(*i) == true template <class IIter, class T> typename iterator_traits<IIter>::difference_type count (IIter first, IIter last, const T& val); template <class IIter, class Pred> typename iterator_traits<IIter>::difference_type Подсчитывает в диапазоне [first, last) количество элементов, равных val. Есть предикатная форма.
  • 8. Алгоритмы, не изменяющие последовательность 2 Алгоритм Описание template <class IIter1, class IIter2> bool equal (IIter1 first1, IIter1 last1, IIter2 first2); template <class IIter1, class IIter2, class BPred> bool equal (IIter1 first1, IIter1 last1, IIter2 first2, BPred pred); Сравнивает интервалы [first1, last1) и [first2, first2 +(last1-first1)). В случае равенства возвращает true. Предикатная форма имеет то же имя и проверяет на выполнение условие pred(*i1, *i2) == true, где i1 из [first1, last1) и i2 из [first2, first2 +(last1-first1)). template <class FIter1, class FIter2> FIter1 search(FIter1 first1, FIter1 last1, FIter2 first2, FIter2 last2); template <class FIter1, class FIter2, class BPred> FIter1 search(FIter1 first1, FIter1 last1, FIter2 first2, FIter2 last2, BPred Алгоритм ищет интервал [first2, last2) в интервале [first1, last1) и возвращает позицию первого элемента, если находит, last2 – если не находит. Предикатная форма проверяет подинтервал на удовлетворение предикату.
  • 9. Алгоритмы, изменяющие последовательность Алгоритм описание template <class IIter, class OIter> OIter copy(IIter first, IIter last, OIter result); template <class BIter1, class BIter2> BIter2 copy_backward(BIter1 first, BIter1 last, BIter2 result); template <class IIter, class OIter, class UPred> OIter copy_if(IIter first, IIter last, OIter result, UPred p); Алгоритм, копирующий значения из полуинтервала [first, last) в [result, result + (last-first)). copy_backward копирует элементы в обратном порядке. copy_if копирует элементы, удовлетворяющие условию p. Этот алгоритм был введен в стандарте С++11. template <class T> void swap(T& a,T& b); template < class FIter1 , class FIter2> FIter2 swap_ranges ( FIter1 first1, FIter1 last1, FIter2 first2 ); template < class FIter1 , class FIter2> void iter_swap ( FIter1 a , FIter2 b ); Алгоритм swap меняет значения двух переменных местами. swap_ranges – меняет местами значения двух интервалов. iter_swap – меняет местами значения двух итераторов.
  • 10. Алгоритмы, изменяющие последовательность 2 алгоритм описание template < class FIter , class T> void replace ( FIter first , FIter last , const T& old_value , const T& new_value ); template < class FIter, class Pred, class T> void replace_if ( FIter first , FIter last , UPred pred , const T& new_value ); Заменяет old_value на new_value на отрезке [first, last). Предикативная форма заменяет все значения, удовлетворяющие предикату. template <class FIter, class T> FIter remove (FIter first, FIter last, const T& val); template <class IIter, class OIter, class T> OIter remove_copy (IIter first, IIter last, OIter result, const T& val); template <class FIter, class UPred> FIter remove_if (FIter first, FIter last, Удаляет элементы из отрезка [first, last), равные val. Предикативная форма удаляет все элементы, удовлетворяющие условию pred.
  • 11. Алгоритмы, изменяющие последовательность 3 алгоритм описание template <class FIter> FIter unique (FIter first, FIter last); template <class FIter, class BPred> FIter unique (FIter first, FIter last, BPred pred); Удаляет все повторы на отрезке [first, last). Предикатная форма сравнивает элементы из отрезка по функции сравнения pred template <class FIter, class Generator> void generate (FIter first, FIter last, Generator gen); Заполняет отрезок [first, last) значениями, возвращаемыми gen template <class IIter, class OIter, class UOper> OIter transform (IIter first, IIter last, OIter result, UOper op); template <class IIter, class IIter, class OIter, class BOper> OIter transform (IIter first1, IIter1 last1, IIter2 first2, OIter result, BOper binary_op); Первая версия записывает в выходной отрезок [result, result + (last-first)) значения op(*it) где it из отрезка [first, last) Вторая версия записывает в выходной отрезок [result, result + (last1-first1)) значения op(*it1, *it2) где it1 из отрезка [first1, last1), it2 из отрезка [first2, first2+(last1-first1))