printSTL

printАлгоритмы

Все шаблонные алгоритмы работают не только со структурами данных в библиотеке, но также и с встроенными структурами данных C++. Например, все алгоритмы работают с обычными указателями.
Обработка скалярных значений
max(a,b)максимальное значение
min(a,b)минимальное значение
swap(a,b)обмен
gcd(a,b)НОД
lcm(a,b)НОК
clamp(x,low,high)max(min(x,high),low)
Обработка последовательностей
max_element(first,last)значение максимального элемента набора
min_element(first,last)значение минимального элемента набора
minmax_element(first,last)значения максимального и максимального элемента набора
for_each(first,last,fun)применить к каждому элементу последовательности функциональный объект (функцию) fun
find(first,last,value)поиск первого элемента, равного value
find_if(first,last,fun)поиск первого элемента, для которого fun(x)==true
count(first,last,value)подсчет количества элементов, равных value
count_if(first,last,fun)подсчет количества элементов, для которых fun(x)==true
search(first1,last1, first2,last2)поиск вхождения подпоследовательности, заданной итераторами (first2,last2)
search_n(first1,last1, n,value)поиск подпоследовательности из n значений value
copy(first,last,where)копирование последовательности в where
copy_if(first,last,where,fun)копирование элементов в where для которых fun(x)==true
move(first,last,where)перемещение последовательности в where
transform(first,last, where,fun)преобразование элементов последовательности с помощью функционального объекта (функции) fun
transform(first1,last1, first2,where,fun)преобразование элементов двух последовательностей,
например, суммирование двух векторов a и b:
vector<int> a(n),b(n),c(n);
transform(a.begin(),a.end(), b.begin(),b.end(),c.begin(),plus<int>()
fill(first,last,value)заполнение значением value
fill_n(where,n,value)записать n значений value
iota(first,last,value)заполнение увеличивающимися на 1 значениями, начиная с value
generate(first,last,fun)заполнение результатом функционального объекта (функции) fun()
generate_n(where,n,fun)записать n результатов функционального объекта (функции) fun()
shuffle(first,last,randgen)перемешивание
remove(first,last,value)удаление элементов, равных value, возвращается итератор на конец новой последовательности
например, удаление всех 0:
a.erase(remove(a.begin(), a.end(),0),a.end())
remove_if(first,last,fun)удаление элементов, для которых fun(x)==true
remove_copy(first,last, where,value)копирование элементов, не равных value
remove_copy_if(first,last, where,fun)копирование элементов, для которых fun(x)==false
replace(first,last, oldvalue,newvalue)замена элементов, равных oldvalue на newvalue
replace_if(first,last, fun,newvalue)замена элементов, для которых fun(x)==true на newvalue
replace_copy(first,last, where,oldvalue,newvalue)копирование с заменой
replace_copy_if(first,last, where,fun,newvalue)копирование с заменой
reverse(first,last)изменение порядка элементов на обратный
reverse_copy(first,last,where)копирование в обратном порядке
rotate(first,middle,last)циклический сдвиг, элемент *middle становится первым
rotate_copy(first,middle, last,where)копирование с циклическим сдвигом
partition(first,last,fun)перемещение элементов, для которых fun(x)==true, в начало последовательности
stable_partition(first,last,fun)перемещение элементов, для которых fun(x)==true, в начало последовательности с сохранением порядка в исходной последовательности
next_permutation(first,last)следующая перестановка,
возвращается false, если следующей перестановки не существует
prev_permutation(first,last)предыдущая перестановка
accumulate(first,last, init,fun=plus())подсчет суммы элементов,
можно вместо сложения указать другую бинарную функцию
all_of(first,last,fun)проверка, что все элементы последовательности удовлетворяют предикату fun
any_of(first,last,fun)проверка, что существует элемент последовательности, удовлетворяющий предикату fun
none_of(first,last,fun)проверка, что не существует элемента последовательности, удовлетворяющего предикату fun
Сортировка и обработка упорядоченных последовательностей, множеств (упорядоченных последовательностей без повторений)
sort(first,last)сортировка последовательности
stable_sort(first,last)сортировка с сохранением порядка элементов с равным ключом
is_sorted(first,last)проверка, что последовательность упорядочена в неубывающем порядке
unique(first,last)удалить повторения элементов, возвращается итератор на конец новой последовательности
unique_copy(first,last,where)копирование без повторений
merge(first1,last1, first2,last2,where)слияние
binary_search(first,last,value)проверка наличия значения value
lower_bound(first,last,value)поиск первой позиции для вставки значения
upper_bound(first,last,value)поиск последней позиции для вставки значения
например, подсчет количества элементов, равных v:
int k=upper_bound(a.begin(),a.end(),v) - lower_bound(a.begin(),a.end(),v);
includes(first1,last1, first2,last2)проверка, что множество (first2,last2) является подмножеством множества (first1,last1)
set_intersection(first1, last1,first2,last2,where)пересечение множеств
set_difference(first1, last1,first2,last2,where)разность множеств
set_symmetric_difference(first1, last1,first2,last2,where)симметрическая разность множеств
set_union(first1,last1, first2,last2,where)объединение множеств
Работа с кучей
make_heap(first,last)создать кучу из элементов последовательности
push_heap(first,last)добавить значение *(last-1) к куче (first,last-1), после выполнения куча станет (first,last)
pop_heap(first,last)удалить наибольшее значение из кучи (first,last) и поместить его в *(last-1), после выполнения куча станет (first,last-1)
sort_heap(first,last)превратить кучу в упорядоченную последовательность
Для аргумента where можно использовать либо итератор (указатель) на начало контейнера достаточного размера, либо back_inserter(s), который возвращает добавляющий итератор для контейнера s.
loading