Directorio de artículos
Parte 0 Introducción
Sitio web oficial: https://cplusplus.com/reference/
Esta publicación de blog registra algunas funciones comúnmente utilizadas por el autor cuando usa la biblioteca de algoritmos de C++. Actúa como un diccionario para futuras referencias.
Algoritmo de la parte I
En el archivo de encabezado #include <algorithm>
, proporciona un conjunto de funciones implementadas por algoritmos comunes, que incluyen permutación, clasificación, fusión y búsqueda. La lista de funciones comúnmente utilizadas en el sitio web oficial es la siguiente:
encontrar operación
función | significado |
---|---|
*min_element(v.begin(), v.end()) |
Encuentre el valor mínimo de los datos en el rango v de[begin,end) |
*max_element(v.begin(), v.end()) |
encontrar el valor máximo de los datos en el v rango[begin,end) |
min()/max() |
Devuelve el valor mínimo/máximo. El parámetro entrante puede ser dos tipos simples de números o una matriz, pero no puede ser un contenedor. El contenedor debe usar lo anterior. |
minmax() |
Devuelve los valores máximo y mínimo. |
find(v.begin(),v.end(),key) |
Busque en los datos en el rango de , v si los encuentra, devuelva un iterador de valor, de lo contrario, devuelva[begin,end) key key end |
count(v.begin(),v.end(),key) |
El número de valores estadísticos en el rango v de[begin,end) key |
mismatch(v1.begin(), v1.end(), v2); |
Si los datos en el rango devuelto son los v1 mismos , devolver los datos que son diferentes por primera vez, y el valor devuelto es un[begin,end) v2 pair |
equal(v1.begin(), v1.end(), v2); |
Si los datos en el rango v1 de juicio son los mismos que . devolver lo mismo otra cosa volver[begin,end) v2 true false |
is_permutation(v1.begin(), v1.end(), v2.begin()) |
Si los datos en el rango a juzgar son los v1 mismos que los elementos contenidos, o no en el mismo orden. devolver lo mismo otra cosa volver[begin,end) v2 true false |
search(v1.begin(), v1.end(), v2.begin(), v2.end(),) |
Busque el segmento de datos igual a en el rango de v1 , devuelva el iterador del primer elemento del segmento de datos coincidente, si no lo encuentra, devuelva .[begin,end) v2 [begin,end) v1 v2 v1.end() |
search_n(v.begin(),v.end(),n,tar) |
Encuentre un dato de destino en el rango de , v si lo encuentra, devuelva el primer iterador[begin,end) n tar tar |
shuffle(v.begin(), v.end() |
Mezclar el orden de los datos en un v rango[begin,end) |
all_of(v.begin(), v.end(),func) |
Juzgando si los datos en el rango satisfacen la condición v , en caso afirmativo, devuelva lo contrario[begin,end) func true false |
any_of(v.begin(), v.end(),func) |
Juzgando si hay datos en el rango que satisfagan las condiciones v , si los hay, regrese de lo contrario regrese[begin,end) func true false |
none_of(v.begin(), v.end(),func) |
Juzgando si los datos en el rango v de [begin,end) no están satisfechos func , si no, regrese true de lo contrario regresefalse |
modificar operación
función | significado |
---|---|
transform(v1.begin(), v1.end(), v2.begin(), op_increase); |
Asigne los datos en el rango v1 de a[begin,end) op_increase v2 |
replace(v.begin(), v.end(), a, b); |
Reemplace en los datos en el rango v de con[begin,end) a b |
fill(v.begin(),v.begin()+4,5); |
Establecer todos los valores de datos en el rango v de a[begin,begin+4) 5 |
remove(v.begin(), v.end(),rm) |
Borre todos los datos cuyo valor esté dentro del v rango de[begin,end) rm |
reverse(v.begin(),v.end()) |
voltear los datos en el rango v de[begin,end) |
unique (v.begin(), v.end()) |
unificar los datos en el v rango de[begin,end) |
rotate(v.begin(),v.begin()+3,v.end()) |
Coloque v los primeros 3 elementos del al final, su orden relativo permanece sin cambios |
Ordenar operación
función | significado |
---|---|
sort(v.begin(),v.end(),cmp) |
Organice los datos dentro del rango en orden ascendente de acuerdo con las reglas v , y el iterador inverso se puede usar para el orden inverso[begin,end) cmp rbegin |
is_sorted(v.begin(),v.end()) |
Determinar v si [begin,end) los datos en el rango ya están ordenados |
búsqueda binaria
función | significado |
---|---|
lower_bound(v.begin(), v.end(), tar); |
Encuentre elementos cuyo valor sea menor que en el rango ordenado, devuelva el iterador del último v elemento menor que +1[begin,end) tar tar |
upper_bound(v.begin(), v.end(), tar) |
Encuentre elementos con un valor menor o igual que dentro del rango ordenado v , devolviendo un iterador al primero mayor que[begin,end) tar tar |
equal_range(v.begin(), v.end(), tar); |
Devuelve el rango de datos que es igual a los datos del rango , devuelve uno y los datos del rango son iguales v a[begin,end) tar pair [pair.first,pair.second) tar |
binary_search(v.begin(), v.end(), tar) |
En el rango v de [begin,end) , busque en el camino de la búsqueda binaria tar , regrese si lo encuentra true , de lo contrario regresefalse |
montón
función | significado |
---|---|
make_heap(v.begin(),v.end()) |
Los elementos se v ordenarán, el montón superior predeterminado |
pop_heap(v.begin(),v.end()); |
elemento superior emergente |
push_heap(v.begin(),v.end()); |
añadir elementos al montón |
sort_heap(v.begin(),v.end()); |
Ordenar los elementos en el montón |
is_heap(v.begin(),v.end()); |
Determinar si es un montón |
otro
función | significado |
---|---|
merge(v1,v1+5,v2,v2+5,v.begin()); |
Combinar v1 y v2 ascender juntos |
includes(v1,v1+10,v2,v2+4) |
Determinar v1 si incluirv2 |
set_union(v1, v1+5, v2, v2+5, v.begin()); |
v1 La colección resumida v2 se almacena env |
set_intersection(v1, v1+5, v2, v2+5, v.begin()) |
取v1 和v2 的交集存于v ,返回交集最后一个元素的迭代器+1 |
set_difference(v1, v1+5, v2, v2+5, v.begin()) |
取v1 减v2 的差集存于v |
set_symmetric_difference(v1, v1+5, v2, v2+5, v.begin()) |
取v1 与v2 的互差集存于v ,set_difference 只包含v1 不包含v2 的元素,它都包含,就是不包含公共的元素。 |
lexicographical_compare(v1,v1+5,v2,v2+9) |
比较v1 与v2 的大小,默认小true |
next_permutation(v,v+3) |
将v 变为其下一次置换,尽可能小数在前 |
pre_permutation(v,v+3) |
将v 变为其上一次置换,尽可能小数在前,否极泰来 |
Part.II numeric
处于头文件#include <numeric>
中,定义了常用的数学实现函数。官网中一共5个函数,列表如下:
函数 | 含义 |
---|---|
accumulate(v.begin(),v.end(),0); |
返回v 的[begin,end) 范围内的数据累加和 |
accumulate(v.begin(),v.end(), init, std::minus<int>()) |
返回初始值init 减去v 的[begin,end) 范围内的数据所得到的结果。可以看到第四个参数默认是加法std::plus<int>() ,这里是减法,还可以是乘法std::multiplies<int>() ,除法std::divides<int>() ,或者自己定义的运算myfunc |
adjacent_difference(v.begin(),v.end(), result, minus<int>()) |
v 的[begin,end) 范围内的数据相邻元素进行std::minus<int>() 操作(后一个减前一个,首项不变,默认是减法,当然也可是其他运算),第三个参数是返回结果。 |
inner_product(v1.begin(),v1.end(), v2, init,minus<int>(),divides<int>()); |
v1 的[begin,end) 范围内的元素和v2 做内积(默认相乘相加),加到初始值为init 上,并返回结果。当然这里是相减相除,也可以是自己定义的运算。 |
partial_sum(v.begin(),v.end(), result, std::multiplies<int>()); |
v 的[begin,end) 范围内的数据进行前缀和(部分和)multiplies 运算(默认是加法),并将结果赋值给result |
std::iota(v.begin(),v.end(),init); |
将init 顺次增加1赋值给向量v ,包括init |
Part.III functional
处于头文件#include <functional>
中,定义了许多函数对象类型和支持函数对象的功能。因为里面的函数实现大多是为别的类中的函数提供便利和支持的,因此就不详细列举了(像加-减-乘-除-模-非[反号] plus
-minus
-multiplies
-divides
-modulus
-negate
都是在里面定义的),详细介绍可看官网。
Part.IV memory
处于头文件#include <memory>
中,给容器、管理内存的函数和auto_ptr
模板类定义标准内存分配器。官网中常用的函数列表如下:
函数 | 含义 |
---|---|
T* allocate(size_t n); |
分配足够的存储空间来存储T的n个实例,并返回指向它的指针 |
auto sp = std::make_shared<int>(); |
分配堆空间,创建智能指针make_shared ,用指针鼓励用这个,不要用new |
- 之前我一直以为
memcpy
和sizeof
是在这个头文件中包含的,但是后来发现并没有,sizeof
是C++的一个关键字,memcpy
是在string.h
中定义的。
Part.V iterator
处于头文件#include <iterator>
中,给迭代器(可以将其简单理解为指针,*itr
可以获取迭代器itr
所指向的值)提供定义和支持。官网中常用的函数列表如下:
函数 | 含义 |
---|---|
advance(it,n); |
itr Avanza el iterador n por unidades. Por ejemplo, itr apunta al índice al principio 1 , luego de ejecutar esta instrucción, apunta al índice1+n |
distance(v.begin(),itr) |
Devuelve la distancia de iterador itr a iteradorv.begin() |
begin(container) |
Devuelve container el índice inicial del contenedor. |
begin(container) |
Devuelve container el último índice del contenedor, tenga en cuenta que generalmente end() indica el final del contenedor y no apunta a ningún valor |
prev(itr) |
devuelve itr un iterador al iterador anterior |
next(itr) |
devuelve itr un iterador después del iterador |
Utilidad Parte VI
En el archivo de encabezado #include <utility>
, defina operadores relacionales sobrecargados para simplificar la escritura de operadores relacionales. La lista de funciones comúnmente utilizadas en el sitio web oficial es la siguiente:
función | significado |
---|---|
swap(a,b) |
Intercambiar los valores de a y b , siempre que ambos sean del mismo tipo, se pueden intercambiar |
make_pair(x,y) |
regreso (x,y) compuesto porpair |