El algoritmo de biblioteca de algoritmos STL de C++, numérico, funcional, memoria, iterador, utilidad contiene una lista de funciones de uso común

Parte 0 Introducción

inserte la descripción de la imagen aquí

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 vde[begin,end)
*max_element(v.begin(), v.end()) encontrar el valor máximo de los datos en el vrango[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 , vsi los encuentra, devuelva un iterador de valor, de lo contrario, devuelva[begin,end)keykeyend
count(v.begin(),v.end(),key) El número de valores estadísticos en el rango vde[begin,end)key
mismatch(v1.begin(), v1.end(), v2); Si los datos en el rango devuelto son los v1mismos , devolver los datos que son diferentes por primera vez, y el valor devuelto es un[begin,end)v2pair
equal(v1.begin(), v1.end(), v2); Si los datos en el rango v1de juicio son los mismos que . devolver lo mismo otra cosa volver[begin,end)v2truefalse
is_permutation(v1.begin(), v1.end(), v2.begin()) Si los datos en el rango a juzgar son los v1mismos que los elementos contenidos, o no en el mismo orden. devolver lo mismo otra cosa volver[begin,end)v2truefalse
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)v1v2v1.end()
search_n(v.begin(),v.end(),n,tar) Encuentre un dato de destino en el rango de , vsi lo encuentra, devuelva el primer iterador[begin,end)ntartar
shuffle(v.begin(), v.end() Mezclar el orden de los datos en un vrango[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)functruefalse
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)functruefalse
none_of(v.begin(), v.end(),func) Juzgando si los datos en el rango vde [begin,end)no están satisfechos func, si no, regrese truede lo contrario regresefalse

modificar operación

función significado
transform(v1.begin(), v1.end(), v2.begin(), op_increase); Asigne los datos en el rango v1de a[begin,end)op_increasev2
replace(v.begin(), v.end(), a, b); Reemplace en los datos en el rango vde con[begin,end)ab
fill(v.begin(),v.begin()+4,5); Establecer todos los valores de datos en el rango vde a[begin,begin+4)5
remove(v.begin(), v.end(),rm) Borre todos los datos cuyo valor esté dentro del vrango de[begin,end)rm
reverse(v.begin(),v.end()) voltear los datos en el rango vde[begin,end)
unique (v.begin(), v.end()) unificar los datos en el vrango de[begin,end)
rotate(v.begin(),v.begin()+3,v.end()) Coloque vlos 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)cmprbegin
is_sorted(v.begin(),v.end()) Determinar vsi [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 velemento menor que +1[begin,end)tartar
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)tartar
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 va[begin,end)tarpair[pair.first,pair.second)tar
binary_search(v.begin(), v.end(), tar) En el rango vde [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 vordenará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 v1y v2ascender juntos
includes(v1,v1+10,v2,v2+4) Determinar v1si incluirv2
set_union(v1, v1+5, v2, v2+5, v.begin()); v1La colección resumida v2se almacena env
set_intersection(v1, v1+5, v2, v2+5, v.begin()) v1v2的交集存于v,返回交集最后一个元素的迭代器+1
set_difference(v1, v1+5, v2, v2+5, v.begin()) v1v2的差集存于v
set_symmetric_difference(v1, v1+5, v2, v2+5, v.begin()) v1v2的互差集存于vset_difference只包含v1不包含v2的元素,它都包含,就是不包含公共的元素。
lexicographical_compare(v1,v1+5,v2,v2+9) 比较v1v2的大小,默认小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

  • 之前我一直以为memcpysizeof是在这个头文件中包含的,但是后来发现并没有,sizeof是C++的一个关键字,memcpy是在string.h中定义的。

Part.V iterator

处于头文件#include <iterator> 中,给迭代器(可以将其简单理解为指针,*itr可以获取迭代器itr所指向的值)提供定义和支持。官网中常用的函数列表如下:

函数 含义
advance(it,n); itrAvanza el iterador npor unidades. Por ejemplo, itrapunta al índice al principio 1, luego de ejecutar esta instrucción, apunta al índice1+n
distance(v.begin(),itr) Devuelve la distancia de iterador itra iteradorv.begin()
begin(container) Devuelve containerel índice inicial del contenedor.
begin(container) Devuelve containerel ú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 itrun iterador al iterador anterior
next(itr) devuelve itrun 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 ay b, siempre que ambos sean del mismo tipo, se pueden intercambiar
make_pair(x,y) regreso (x,y)compuesto porpair

Supongo que te gusta

Origin blog.csdn.net/Gou_Hailong/article/details/128476298
Recomendado
Clasificación