Documente Academic
Documente Profesional
Documente Cultură
plantillas estándar
STL es un acrónimo de biblioteca de plantillas estándar. Es un conjunto de clases
de plantilla de C ++ que proporcionan clases y funciones genéricas que se
pueden usar para implementar estructuras de datos y algoritmos. STL se
compone principalmente de:
1. Algoritmos
2. Contenedores
3. Iteradores
Por ejemplo: uno puede revertir un rango con reverse()función, ordenar un rango
con sort()función, buscar en un rango con binary_search()y así sucesivamente.
La biblioteca de algoritmos proporciona abstracción, es decir, no necesariamente
necesita saber cómo funciona el algoritmo.
#include <iostream>
struct node
{
int data;
struct node * next;
}
int main ()
{
struct node *list1 = NULL;
}
#include <iostream>
#include <list>
int main ()
{
list<int> list1;
}
El código anterior crea dos pares, a saber, par1 y par2, ambos con el primer
objeto de tipo T1 y el segundo objeto de tipo T2.
Ahora T1 se denominará primero y T2 se denominará segundo miembro de pair1
y pair2.
Plantilla de par: algunas funciones de
uso común
Aquí hay algunas funciones para la plantilla de pares:
• Operadores (==,! =,>, <, <=,> =): Compara lexicográficamente dos pares.
#include <iostream>
int main ()
{
pair<int,int> pair1, pair3; //creats pair of integers
pair<int,string> pair2; // creates pair of an integer an a string
return 0;
}
TUPLE en STL
tupley pairson muy similares en su estructura. Al igual que en el par podemos
emparejar dos objetos heterogéneos, en la tupla podemos emparejar tres objetos
heterogéneos.
#include <iostream>
int main ()
{
tuple<int, int, int> tuple1; //creates tuple of integers
tuple<int, string, string> tuple2; // creates pair of an integer an 2 string
int id;
string first_name, last_name;
tie(id,first_name,last_name) = tuple2;
/* ties id, first_name, last_name to
first, second and third element of tuple2 */
return 0;
}
El código anterior crea una matriz vacía de object_type con un tamaño máximo
de array_size . Sin embargo, si desea crear una matriz con elementos, puede
hacerlo simplemente usando el = operador, aquí hay un ejemplo:
#include <vector>
int main()
{
array<int, 4> odd_numbers = { 2, 4, 6, 8 };
}
at función
Este método devuelve valor en la matriz en el rango dado. Si el rango dado es
mayor que el tamaño de la matriz, se genera la excepción out_of_range . Aquí
hay un fragmento de código
#include <iostream>
#include <array>
int main ()
{
array<int,10> array1 = {1,2,3,4,5,6,7,8,9};
[ ] OPERADOR
El uso del operador [ ] es el mismo que para las matrices normales. Devuelve el
valor en la posición dada en la matriz. Ejemplo: en el código anterior, la
instrucción cout << array1[5];imprimiría 6 en la consola ya que 6 tiene el índice 5
en la matriz1.
front() función
Este método devuelve el primer elemento en la matriz.
back() función
Este método devuelve el último elemento en la matriz. El punto a tener en cuenta
aquí es que si la matriz no está completamente llena, back () devolverá el
elemento más a la derecha en la matriz.
fill() función
Este método asigna el valor dado a cada elemento de la matriz, por ejemplo:
#include <array>
int main()
{
array<int,8> myarray;
myarray.fill(1);
}
swap función
Este método intercambia el contenido de dos matrices del mismo tipo y el mismo
tamaño. Intercambia el índice, por lo tanto, el elemento del índice i de la primera
matriz se intercambiará con el elemento del índice i de la segunda matriz, y si el
intercambio de cualquiera de los dos elementos genera una ejecución, swap ()
arroja una excepción. A continuación se muestra un ejemplo para demostrar su
uso:
#include <array>
int main()
{
array<int,8> a = {1,2,3,4,5,6,7,8};
array<int,8> b = {8,7,6,5,4,3,2,1};
empty función
Este método se puede utilizar para verificar si la matriz está vacía o no.
Sintaxis:, array_name.empty()devuelve verdadero si la matriz está vacía; de lo
contrario, devuelve falso.
size función
Este método devuelve el número de elementos presentes en la matriz.
max_size función
Este método devuelve el tamaño máximo de la matriz.
begin función
Este método devuelve el iterador apuntando al primer elemento de la matriz. Los
iteradores son como punteros y los discutiremos más adelante en las lecciones,
por ahora puedes pensar en un iterador como un puntero a la matriz.
end función
Este método devuelve un iterador que apunta a un elemento al lado del último
elemento de la matriz, por ejemplo, la matriz anterior tiene 4 elementos y la
llamada end () devolverá el iterador que apunta al cuarto índice de la matriz.
Podemos hacer una cosa, inicializar la matriz con el tamaño máximo permitido
por el compilador, es decir, 10^6elementos por matriz, pero es un enfoque que
consume mucho espacio y hay un desperdicio de espacio si el número de
elementos a ingresar es demasiado bajo, por lo tanto esto enfoque nunca se
utiliza en la programación.
¡La solución del problema anterior son las matrices dinámicas! Tienen un tamaño
dinámico, es decir, su tamaño puede cambiar durante el tiempo de ejecución. La
biblioteca de contenedores proporciona vectores para replicar matrices
dinámicas.
#include <vector>
int main()
{
std::vector<int> my_vector;
}
#include <vector>
int main()
{
std::vector<string> v {"Pankaj" ,"The" ,"Java" ,"Coder"};
}
#include <vector>
int main()
{
std::vector<string> v(v1.begin(), v1.end());
}
El código anterior inicializa el vector por elementos señalados por iteradores
devueltos por v1.begin () y v2.end (), begin () y end () son la misma función que
hemos estudiado con array, funcionan igual con vectores.
#include <vector>
int main()
{
std::vector<string> v(4 , "test");
}
Estas son algunas de las formas en que puede inicializar su vector, pero
recuerde, inicializar su vector usando otro vector o usando elementos
directamente no limita su tamaño, su tamaño siempre será dinámico y se pueden
insertar más elementos en el vector , siempre que sea necesario.
push_back función
push_back()se usa para insertar un elemento al final del vector. Si el tipo de
objeto pasado como parámetro en push_back () no es el mismo que el del vector
o no es interconvertible, se genera una excepción.
La siguiente ilustración mostrará cómo funciona push_back ():
#include <iostream>
#include <vector>
int main()
{
vector<int> v;
v.push_back(1); //insert 1 at the back of v
v.push_back(2); //insert 2 at the back of v
v.push_back(4); //insert 3 at the back of v
124
insert función
insert(itr, element) El método inserta el elemento en el vector antes de la posición
señalada por el iterador itr.
Este método también se puede utilizar para insertar elementos de cualquier otro
vector en un rango dado, especificado por dos iteradores, que definen el punto
inicial y final del rango.
pop_back función
pop_back () se usa para eliminar el último elemento del vector. Reduce el tamaño
del vector en uno.
A continuación se muestra un ejemplo:
#include <iostream>
#include <vector>
int main()
{
vector<int> v1 {10,20,30,40};
v1.pop_back();
vector<int>::iterator it;
10 20 30
erase función
erase(itr_pos)elimina el elemento señalado por el iterador itr_pos . El método de
borrado también se puede sobrecargar con un iterador adicional que especifica
el punto final del rango que se va a eliminar, es decir erase(itr_start, itr_end).
#include <iostream>
#include <vector>
int main()
{
vecto<int>v1 {10,20,30,40};
vector<int>iterator:: it = v.begin();
v.erase(it); //removes first element from the vector
v.erase(v1.begin(), v1.end() - 2 )
/*removes all the elements except last two */
resize función
resize(size_type n, value_type val)El método cambia el tamaño del vector
a n elementos. Si el tamaño actual del vector es mayor que n , los elementos
finales se eliminan del vector y si el tamaño actual es menor que n , se insertan
elementos val adicionales en la parte posterior del vector.
Por ejemplo, si el tamaño del vector es 4 en este momento, con los elementos
{10, 20, 30, 40} y usamos el resizemétodo para redimensionarlo al tamaño 5.
Entonces, por defecto , se insertará un quinto elemento con valor 0 en el
vector. Podemos especificar que los datos no sean cero, al mencionarlos
explícitamente como val al llamar al método de cambio de tamaño.
swap función
Este método intercambia el valor de dos vectores.
Si tenemos dos vectores v1 y v2 y queremos intercambiar los elementos dentro
de ellos, solo necesita llamar v1.swap(v2), esto intercambiará los valores de los
dos vectores.
clear función
Este método borra todo el vector, elimina todos los elementos del vector pero no
lo elimina.
SINTAXIS: clear()
Para un vector v , v.clear()lo borrará, pero no lo eliminará.
size función
Este método devuelve el tamaño del vector.
empty función
Este método devuelve verdadero si el vector está vacío; de lo contrario, devuelve
falso.
capacity función
Este método devuelve el número de elementos que se pueden insertar en el
vector en función de la memoria asignada al vector.
at función
Este método funciona igual en el caso del vector que para la
matriz. vector_name.at(i)devuelve el elemento en el índice i-ésimo en el
vector vector_name .
fronty backfunciones
vector_name.front()vuelve a ejecutar el elemento en la parte frontal del vector
(es decir, el elemento más a la izquierda). Mientras vector_name.back()devuelve
el elemento en la parte posterior del vector (es decir, el elemento más a la
derecha).
La sintaxis para crear una nueva lista vinculada usando la plantilla de lista es:
#include <iostream>
#include <list>
int main()
{
std::list<int> l;
}
/* Creates a new empty linked list l */
Similar a vector y matriz, las listas también se pueden inicializar con parámetros,
#include <iostream>
#include <list>
int main()
{
std::list<int> l{1,2,3};
}
/* Creates a new linked list l */
Aquí hay algunas formas más por las cuales podemos inicializar nuestra lista:
#include <iostream>
#include <list>
int main()
{
list<int> myList{1,2,3};
/* creates list with 1,2,3 in it */
list<int> myNewList = 1;
/* create list myNewList of integer
and copies value of 1 into it*/
}
#include <iostream>
#include <list>
return 0;
}
push_backy push_frontfunciones
push_back(element) El método se utiliza para insertar elementos en una lista
desde atrás.
int main()
{
list<int> l{1,2,3,4,5};
l.push_back(6);
l.push_back(7);
/* now the list becomes 1,2,3,4,5,6,7 */
l.push_front(8);
l.push_front(9);
/* now the list becomes 9,8,1,2,3,4,5,6,7 */
pop_backy pop_frontfunciones
#include <iostream>
#include <list>
int main()
{
list<int> l{1,2,3,4,5};
l.pop_back()();
/* now the list becomes 1,2,3,4 */
l.pop_front()();
/* now the list becomes 2,3,4 */
}
empty función
Este método devuelve verdadero si la lista está vacía; de lo contrario, devuelve
falso.
size función
Este método se puede usar para encontrar el número de elementos presentes
en la lista.
swap función
Intercambia dos listas, si se produce una excepción al intercambiar cualquier
elemento, swap()arroja una excepción. Ambas listas que deben intercambiarse
deben ser del mismo tipo, es decir, no puede intercambiar la lista de un número
entero con la lista de cadenas.
reverse función
Este método puede usarse para revertir una lista por completo.
#include <iostream>
#include <list>
int main()
{
list<int> l{1,2,3,4,5};
l.reverse();
/* now the list becomes 5,4,3,2,1 */
}
sort función
sort()El método ordena la lista dada. No crea una nueva lista ordenada, pero
cambia la posición de los elementos dentro de una lista existente para
ordenarla. Este método tiene dos variaciones:
#include <iostream>
#include <list>
int main()
{
list<int> list1 = {2,4,5,6,1,3};
list<string> list2 = {"h", "hhh", "hh"};
list1.sort();
/* list1 is now 1 2 3 4 5 6 */
list2.sort(compare_function);
/* list2 is now h hh hhh */
}
splice función
splice()El método transfiere los elementos de una lista a otra. Hay tres versiones
de empalme:
#include <iostream>
#include <list>
int main ()
{
list<int> list1 = {1,2,3,4};
list<int> list2 = {5,6,7,8};
list<int>::iterator it;
it = list1.begin();
++it; //pointing to second position
list1.splice(it, list2);
/* transfer all elements of list2 at position 2 in list1 */
/* now list1 is 1 5 6 7 8 2 3 4 and list2 is empty */
return 0;
}
merge función
Fusiona dos listas ordenadas. Es obligatorio que ambas listas se ordenen
primero. merge()combina las dos listas de modo que cada elemento se coloque
en su posición correcta en la lista resultante. La sintaxis para fusionar
es list1.merge(list2).
La lista que se pasa como parámetro no se elimina y la lista que llama a merge
() se convierte en la lista fusionada.
#include <iostream>
#include <list>
int main ()
{
list<int> list1 = {1,3,5,7,9};
list<int> list2 = {2,4,6,8,10};
list1.merge(list2);
Por ejemplo, dejemos que list1 = {1, 2, 3} y list2 = {1, 3, 2}, ahora si queremos
verificar si list1 es mayor que list2 o no, solo verificamos el elemento de cada
lista en el ordenar que aparezcan en las listas. Como 1 en la lista1 es igual a 1
en la lista2, procedemos más, ahora 2 en la lista1 es más pequeño que 3 en la
lista2, por lo tanto, la lista2 es lexicográficamente mayor que la lista1.
Operadores ==, >, < , <=, >=se pueden utilizar para comparar la lista de orden
lexicográfico.
#include <iostream>
#include <map>
int main ()
{
map<int,int> m{ {1,2} , {2,3} , {3,4} };
/* creates a map m with keys 1,2,3 and
their corresponding values 2,3,4 */
map<string,int> map1;
/* creates a map with keys of type character and
values of type integer */
at y [ ]
Tanto en y [ ]se utilizan para acceder a los elementos en el mapa. La única
diferencia entre ellos es que en una excepción si la clave de acceso no está
presente en el mapa, por el otro lado del operador [ ]inserta la llave en el mapa
si la clave no está ya presente en el mapa.
#include <iostream>
#include <map>
int main ()
{
map<int,string> m{ {1,”nikhilesh”} , {2,”shrikant”} , {3,”ashish”} };
cout << m.at(1) ; // prints value associated with key 1 ,i.e nikhilesh
cout << m.at(2) ; // prints value associated with key 2 ,i.e shrikant
/* note that the parameters in the above at() are the keys not the index */
cout << m[3] ; // prints value associated with key 3 , i.e ashish
m[4] = "doodrah";
/* since there is no key with value 4 in the map,
it insert a key-value pair in map with key=4 and value = doodrah */
m.at(5) = "umeshwa";
/* since there is no key with value 5 in the map ,
it throws an exception */
}
empty, sizeymax_size
empty()devuelve boolean verdadero si el mapa está vacío, de lo contrario
devuelve booleano falso. size()devuelve el número de entradas en el mapa, una
entrada consta de una clave y un valor. max_size()devuelve el límite superior de
las entradas que puede contener un mapa (entradas máximas posibles) en
función de la memoria asignada al mapa.
insert y insert_or_assign
insert()se usa para insertar entradas en el mapa. Como las claves son únicas en
un mapa, primero verifica si la clave dada ya está presente en el mapa o no, si
está presente, la entrada no se inserta en el mapa y el iterador de la clave
existente se devuelve; de lo contrario, la nueva entrada es insertado en el mapa.
Hay dos variaciones de insert ():
#include <iostream>
#include <map>
int main ()
{
map<int,int> m{{1,2} , {2,3} , {3,4} };
map::iterator i , j;
i = m.find(2); // points to entry having key =2
j = m.find(5); // points to entry having key =5
map<int,int> new_m;
new_m.insert(i,j);
/* insert all the entries which are pointed
by iterator i to iterator j*/
m.insert( make_pair(3,6));
// do not insert the pair as map m already contain key = 3 */
erase y clear
erase()elimina la entrada del mapa señalado por el iterador (que se pasa como
parámetro), sin embargo, si queremos eliminar todos los elementos del mapa,
podemos usarlo clear(), borra el mapa y establece su tamaño en 0.
begin, endyfind
comenzar, finalizar y buscar devuelve un iterador. begin()devuelve el iterador a
la entrada inicial del mapa, end()devuelve el iterador junto a la última entrada en
el mapa y find()devuelve el iterador a la entrada que tiene una clave igual a la
clave dada (pasada como parámetro).
Para saber más acerca de la estructura de datos de la pila, visite: Estructura pila
de datos
stack<object_type> stack_name;
push función
push () se usa para insertar el elemento en la pila, los elementos se insertan en
la parte superior de la pila.
#include <iostream>
#include <stack>
int main ()
{
stack<int> s; // creates an empty stack of integer s
pop función
Este método se usa para eliminar un solo elemento de la pila. Reduce el tamaño
de la pila en 1. El elemento eliminado siempre es el elemento superior de la pila
(elemento agregado más recientemente). El pop()método no devuelve nada.
top función
Este método devuelve el elemento superior de la pila. Tenga en cuenta que este
método devuelve el elemento, no lo elimina, a diferencia de pop ().
SINTAXIS: top()
sizey emptyfunciones
size()devuelve el número de elementos presentes en la pila, mientras
que empty()verifica si la pila está vacía o no. vacío devuelve verdadero si la pila
está vacía, de lo contrario se devuelve falso.
swap función
Este método intercambia los elementos de las dos pilas.
#include <iostream>
#include <stack>
int main ()
{
stack<int> s;
push función
push()se usa para insertar el elemento en la cola. El elemento se inserta en la
parte posterior o posterior de la cola.
#include <iostream>
#include <queue>
pop función
Este método elimina un solo elemento del frente de la cola y, por lo tanto, reduce
su tamaño en 1. El elemento eliminado es el elemento que se ingresó
primero. El pop()no devuelve nada.
#include <iostream>
#include <queue>
int main ()
{
queue <int> q; // creates an empty queue of integer q
sizey emptyfunciones
size()devuelve el número de elementos presentes en la cola, mientras
que empty()verifica si la cola está vacía o no. vacío devuelve verdadero si la cola
está vacía, de lo contrario se devuelve falso.
Swap función
Método swap()Intercambia los elementos de las dos colas.
priority_queue<int> pq;
push función
Este método inserta un elemento en la prioridad_queue. La inserción de los
elementos tiene una complejidad temporal del tiempo logarítmico.
#include <iostream>>
#include <queue>
int main ()
{
priority_queue<int> pq1;
return 0;
}
pop función
Este método elimina el elemento superior de la prioridad_queue (elemento
mayor), reduciendo el tamaño de la cola de prioridad en 1.
#include <iostream>>
#include <queue>
int main ()
{
priority_queue<int> pq1;
pq1.push(30); // inserts 30 to pq1 , now top = 30
pq1.push(40); // inserts 40 to pq1 , now top = 40 ( maxinmum element)
pq1.push(90); // inserts 90 to pq1 , now top = 90
pq1.push(60); // inserts 60 to pq1 , top still is 90
return 0;
}
top función
Este método devuelve el elemento en la parte superior de priority_queue, que es
el elemento más grande presente en la cola.
emptyy sizefunciones
size()devuelve el número de elemento presente en la prioridad _queue, mientras
que empty()devuelve booleano verdadero si la prioridad_queue está vacía; de lo
contrario, se devuelve booleano falso.
swap función
Este método intercambia los elementos de dos priority_queue.
#include <iostream>
#include <deque>
#include <vector>
int main ()
{
dq.push_back(10);
/* now dq is : 1,5,8,9,3,10 */
dq.push_front(20);
/* now dq is : 20,1,5,8,9,3,10 */
deque<int>::iterator i;
i=dq.begin()+2;
/* i points to 3rd element in dq */
dq.insert(i,15);
/* now dq 20,1,15,5,8,9,3,10 */
int a[]={7,7,7,7};
d1.insert(dq.begin() , a , a+4 );
/* now dq is 7,7,7,7,20,1,15,5,8,9,3,10 */
}
pop_backy pop_frontfunciones
pop_back()elimina un elemento de la parte posterior de la calcomanía, mientras
que pop_frontelimina un elemento de la parte frontal de la calcomanía, ambos
disminuyen el tamaño de la calcomanía en uno.
#include <iostream>
#include <deque>
#include <vector>
dq.pop_back();
/* removes an element from the back */
/* now the deque dq is : 1,5,8,9,3,5,6 */
dq.pop_front();
/* now dq is : 1,5,8,9,3,5,6 */
}
swap función
Este método puede usarse para intercambiar elementos de dos deques.
#include<iostream>
#include<vector>
int main()
{
vector<int>::iterator i;
/* create an iterator named i to a vector of integers */
vector<string>::iterator j;
/* create an iterator named j to a vector of strings */
list<int>::iterator k;
/* create an iterator named k to a vector of integers */
map<int, int>::iterator l;
/* create an iterator named l to a map of integers */
}
#include<iostream>
#include<vector>
int main()
{
vector<int> v(10);
/* creates an vector v : 0,0,0,0,0,0,0,0,0,0 */
vector<int>::iterator i;
return 0;
}
• avanzar
• distancia
• siguiente
• prev
• empezar
• fin
advance() Operación
Incrementará el iterador i por el valor de la distancia. Si el valor de la distancia
es negativo, se disminuirá el iterador.
#include<iostream>
#include<vector>
int main()
{
vector<int> v(10) ; // create a vector of 10 0's
vector<int>::iterator i; // defines an iterator i to the vector of integers
i = v.begin();
/* i now points to the beginning of the vector v */
advance(i,5);
/* i now points to the fifth element form the
beginning of the vector v */
advance(i,-1);
/* i now points to the fourth element from the
beginning of the vector */
}
distance() Operación
Devolverá el número de elementos o podemos decir la distancia entre el primer
y el último iterador.
int main()
{
vector<int> v(10) ; // create a vector of 10 0's
vector<int>::iterator i, j; // defines iterators i,j to the vector of integers
i = v.begin();
/* i now points to the beginning of the vector v */
j = v.end();
/* j now points to the end() of the vector v */
next() Operación
Devolverá el enésimo iterador a i , es decir, el iterador que señala al enésimo
elemento desde el elemento señalado por i.
SINTAXIS: next(iterator i ,int n)
prev() Operación
Devolverá el enésimo predecesor a i , es decir, el iterador que señala al
enésimo elemento predecesor desde el elemento señalado por i.
SINTAXIS: prev(iterator i, int n)
begin() Operación
Este método devuelve un iterador al inicio del contenedor dado.
SINTAXIS: begin()
end() Operación
Este método devuelve un iterador al final del contenedor dado.
SINTAXIS: end()
if(a[mid] == key)
{
return true;
}
else if(a[mid] > key)
{
return binary_search(l, mid-1, key, a);
}
else if(a[mid] < key)
{
return binary_search(mid+1, r, key, a);
}
}
}
• ordenar
• se clasifica
• parcial_sort
sort método
Esta función de STL, ordena el contenido del rango dado. Hay dos versiones de
sort ():
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int arr[5] = {1,5,8,4,2};
vector<int> v1;
v1.push_back(8);
v1.push_back(4);
v1.push_back(5);
v1.push_back(1);
/* use of compare_function */
int a2[] = { 4,3,6,5,6,8,4,3,6 };
sort(s,s+4,compare_string);
/* now s is "a","ab","abc","abcde" */
}
partial_sort método
partial_sort()clasifica los primeros elementos de la mitad en el rango dado, los
otros elementos de la mitad permanecen como estaban inicialmente. partial_sort
() también tiene dos variaciones:
int main()
{
int a[] = {9,8,7,6,5,4,3,2,1};
is_sorted método
Esta función de STL devuelve verdadero si se ordena el rango dado. Hay dos
versiones de is_sorted ():
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int a[5] = {1,5,8,4,2};
cout<<is_sorted(a, a+5);
/* prints 0 , Boolean false */
vector<int> v1;
v1.push_back(8);
v1.push_back(4);
v1.push_back(5);
v1.push_back(1);
Tenga en cuenta que first y last son iteradores y el elemento señalado por last
se excluye de la búsqueda.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main ()
{
int inputs[] = {7,8,4,1,6,5,9,4};
vector<int> v(inputs, inputs+8);
cout<<binary_search(v.begin() , v.end() , 7 ); //prints 1 , Boolean true
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main ()
{
int input[] = {1,1,1,2,2,2,3,3,6,7,7,7,7,7,8,9};
vector v(input, input+16);
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main ()
{
int input[] = {1,2,2,3,4,4,5,6,7,8,10,45};
vector<int> v(input, input+12);
lower_bound método
lower_bound()devuelve un iterador a los elementos en el rango dado que no
compara menos que el valor dado. El rango dado ya debería estar ordenado para
que lower_bound () funcione correctamente. En otras palabras, devuelve un
iterador al límite inferior del elemento dado en el rango ordenado dado.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main ()
{
int input[] = {1,2,2,3,4,4,5,6,7,8,10,45};
vector<int> v(input,input+12);
• contar
• igual
• discordancia
• buscar
• buscar_n
count método
count()devuelve el número de elementos en el rango dado que son iguales al
valor dado. La sintaxis para contar es:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main ()
{
int values[] = {5,1,6,9,10,1,12,5,5,5,1,8,9,7,46};
return 0;
}
equal método
equal()compara los elementos en dos rangos, si todos los elementos en un rango
se comparan iguales a sus elementos correspondientes en otro rango, se
devuelve Boolean true, de lo contrario se devuelve Boolean false. Hay dos
variaciones:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int inputs1[] = { 1,2,3,4,5,6,7,8};
int inputs2[] = { -1,2,1,2,3,4,6,7,8,9};
mismatch método
Este método devuelve un par de iteradores, donde el primer iterador del par
apunta al elemento en el primer contenedor y el segundo iterador apunta al
elemento en el segundo contenedor donde se ha producido una falta de
coincidencia. Hay dos variaciones de mismatch().
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int inputs1[] = {1,2,3,4,5,6,7,8};
int inputs1[] = {-1,2,1,2,3,4,6,7,8,9};
search método
Esta función se utiliza para realizar búsquedas de una secuencia dada en
un rango dado . Hay dos variaciones de search():
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int inputs1[] = { 1,2,3,4,5,6,7,8};
int inputs2[] = { 2,3,4};
vector<int>::iterator i ,j;
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int inputs1[] = {1,2,3,4,4,4,8,5,6,7,8};
• copiar y copiar_n
• llenar y llenar_n
• moverse
• transformar
• generar
• intercambiar
• swap_ranges
• marcha atrás
• copia inversa
• girar
• único
• copia_unica
copy y copy_n
Cubramos cada método uno por uno comenzando con el copymétodo:
copy método
Este método copia los elementos del rango definido por dos
iteradores primero y último en el rango que comienza por el iterador first2 .
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main ()
{
vector<int> v1,v2;
v1.push(2);
v1.push(4);
v1.push(6);
v1.push(8);
v1.push(10);
/* v2 is now 2,4,6,8,10 */
}
copy_n método
Esta función copia los primeros n elementos de la posición definida por los
iteradores primero en el rango que comienza por el iterador first2 .
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main ()
{
int values[] = {1,2,3,4,5,6,7,8,9};
vector<int> v1(values, values+9), v2;
fill y fill_n
Cubramos cada método uno por uno comenzando con el fillmétodo:
fill método
Este método asigna al elemento un valor dado en el rango definido por dos
iteradores primero y último . La sintaxis para fill () es fill(iterator first, iterator
last, int value),.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main ()
{
vector<int> v1(10); // v1 is now 0,0,0,0,0,0,0,0,0,0
/* now v1 is 5,5,5,5,5,5,5,5,5,5 */
fill_n método
Este método le asigna a los primeros n elementos un valor dado desde la
posición definida por el iterador primero . La sintaxis para fill_n esfill_n(iterator
first, iterator last, int value)
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main ()
{
int values[] = {1,2,3,4,5,6,7,8,9};
vector<int> v1(values, values+9);
fill_n(v1.begin(), 5 ,10);
/* v1 is now 10,10,10,10,10,6,7,8,9 */
}
move método
Este método mueve los elementos del contenedor actual y devuelve
su referencia de valor r . La sintaxis para mover es move(element). move () está
disponible en C ++ 11 y superior.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main ()
{
string a = "nicky";
string b = "Vicky";
vector<string> name;
transform
transform aplica una operación unaria / binaria en un rango dado y copia el
resultado en el rango comenzando desde el iterador res . Hay dos versiones de
transform () que difieren según el tipo de operaciones realizadas en los
elementos.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
/* v2 : 1,2,3,4,5,6,7,8,9 */
/* v1 : 10,20,30,40,50,60,70,80,90 */
res2.resize(10);
generate y generate_n
Cubramos cada método uno por uno comenzando con el generatemétodo:
generate método
Este método asigna todos los elementos en el rango dado al valor devuelto por
la llamada sucesiva a la función generate_element. La sintaxis
para generar es generate(iterator first, iterator last, generator_function
generate_element).
generate_n método
Este método asigna los primeros n elementos en el rango dado al valor devuelto
por la llamada sucesiva a la función generate_element. La sintaxis
para generar es generate(iterator first, int n, generator_function
generate_element).
#include <iostream>
#include <algorithm>
#include <vector>
#include <time.h>
#include <cstdlib>
int generate_random()
{
return rand()%10;
}
int main()
{
srand(time(NULL));
vector<int> v1 , v2;
v1.resize(10);
v2.resize(10);
generate_n(v2.begin(), 5, generate_random);
swap Método
Este método intercambia los elementos de dos contenedores del mismo tipo.
#include <iostream>
#include <utility>
#include <vector>
int main ()
{
int a = 6;
int b = 9;
swap(a,b);
/* a = 9 , b=6 */
vector<int> v, c;
for(int j=0; j < 10; j++)
{
v.push_back(j);
c.push_back(j+1);
}
swap(v,c);
swap_ranges método
swap_ranges(iterator first1, iterato last1, iterato first2): Intercambia los elementos
en el rango [first1, last1] con los elementos presentes en el rango a partir
de first2 .
#include <iostream>
#include <utility>
#include <vector>
int main ()
{
vector<int> v, c;
for(int j=0; j < 10; j++)
{
v.push_back(j);
c.push_back(j+1);
}
cout<<endl;
reverse método
reverse(iterator first, iterator last) se usa para invertir el orden de los elementos
en el rango [primero, último].
#include <iostream>
#include <algorithm>
#include <vector>
int main ()
{
int a[] = {1,5,4,9,8,6,1,3,5,4};
reverse(a, a+10);
reverse(a, a+5);
reverse(v.begin(), v.end());
reverse_copy método
Este método copia los elementos en el rango dado en el orden inverso. No
cambia el orden del contenedor original. La sintaxis
para reverse_copy es reverse_copy(iterator first ,iterator last ,iterator res), copia
los elementos en el rango [primero, último] en el orden inverso al rango
comenzando por el iterador res .
#include <iostream>
#include <algorithm>
#include <vector>
int main()
{
int values[] = {1,4,8,9,5,6,2,7,4,1};
vector<int> v2;
/* now v2 is : 1,4,7,2,6,5,9,8,4,1 */
}
rotate método
Este método se utiliza para rotate(iterator first, iterator middle, iterator last)los
elementos presentes en el rango dado [primero, último] de modo que el elemento
señalado por el iterador central se convierta en el primer elemento.
#include <iostream>
#include <algorithm>
#include <vector>
int main ()
{
int a[] = {1,5,9,8,4,6,9,2};
vector<int> v(a,a+8);
rotate(a,a+4,a+8);
/* rotate a such that a[4] is now the first element of array a */
/* now a is : 4,6,9,2,1,5,9,8 */
unique método
Este método elimina los elementos duplicados consecutivos del rango
dado. Tiene dos variaciones. Devuelve un iterador a la posición que está al lado
del último elemento del nuevo rango. resize()se puede usar para ajustar el
tamaño del contenedor después de unique ().
#include <iostream>
#include <algorithm>
#include <vector>
#include <utility>
int main ()
{
int values[] = {10,5,5,5,9,6,6,4,4};
vector<int> v (values,values+9) , v4;
vector<int>::iterator it;
it = unique(v.begin(), v.end());
/* vector v is now : 10,5,9,6,4,-,-,-,- */
v.resize(distance(v.begin(),it));
/* resize the vector by the size returned by distance function,
which returns the distance between the two iterators */
/* using compare_function */
return 0;
}
unique_copy método
Este método copia los elementos únicos del rango [primero, último] y devuelve
el iterador a la posición al lado del último elemento en el nuevo rango. Tiene dos
variaciones. Devuelve un iterador a la posición que está al lado del último
elemento del nuevo rango. resize()se puede usar para ajustar el tamaño del
contenedor después de unique ().
#include <iostream>
#include <algorithm>
#include <vector>
int main ()
{
int values[] = {10,5,5,5,9,6,6,4,4};
vector<int> v (values,values+9);
vector<int> v2;
v2.resize(v.size());
vector<int>::iterator it;
it = unique(v.begin(), v.end());
/* vector v2 is now : 10,5,9,6,4,-,-,-,- */
v.resize(distance(v.begin(), it));
/* resize the vector by the size returned by distance function,
which returns the distance between the two iterators */
/* using compare_function */
vector<int> v3(values,values+9),v4;
v4.resize(v3.size());
• Método iota
• Método de acumulación
• Método parcial_sum
iota Método
Este método asigna todos los elementos sucesivos en el rango [primero, último]
como un valor incrementado del elemento mismo. Está disponible en c ++ 11 y
superior. Su sintaxis es iota(iterator first, iterator last, int value ).
#include<iostream>
#include<numeric>
#include<vector>
int main()
{
vector<int> v(10);
/* now vector v is : 0,0,0,0,0,0,0,0,0,0 */
iota(v.begin(), v.end(), 10 );
accumulate Método
Este método realiza la operación op en todos los elementos en el rango [primero,
último] y almacena el resultado en el resultado del contenedor. Hay dos
variaciones de acumulación, en la primera no se define ningún operador binario
en la llamada a la función, por lo que, por defecto, se realiza la adición , de lo
contrario se realiza el operador binario op .
int main()
{
vector<int> v;
int result;
/* now result = 45 */
/* applies myoperator on all the elements in the range v.begin() and v.end()
and store them in result */
/* now result = 9! */
}
partial_sum Método
Este método asigna todos los elementos en el rango a partir
del resultado del iterador de la operación op en el rango sucesivo en [first,
last]. Aquí se puede omitir la operación binaria, si no se especifica un operador
binario, la adición se realiza de manera predeterminada.
#include<iostream>
#include<numeric>
#include<vector>
int main()
{
int a[] = {1,2,3,4,5};
vector<int> v (a,a+5);
vector<int> v2;
/* vector v is 1,2,3,4,5 */
v2.resize(v.size());
/* now v2 is : 1,3,6,10,15 */
/* sum of the successive range in v.begin() and v.end() */
/* now v2 is : 1,2,6,24,120 */
}
• Método max
• Método max_element
• Método min
• Método min_element
• Método minmax
• Método minmax_element
• Método lixicographically_compare
• Método next_permutation
• Método de permutación previa
maxy minmétodo
max La sintaxis del método es: max(object_type a, object_type b,
compare_function)
Este método devuelve el elemento más grande de a y b. compare_function se
puede omitir. Si no se utiliza la función compare_fun en max (), los elementos se
comparan con el operador > de forma predeterminada. compare_function se
utiliza para determinar cuál de los objetos es más grande cuando los objetos a y
b son de tipo no numérico.
El siguiente es un ejemplo para demostrar el uso de los métodos max () y min ().
#include<iostream>
#include<algorithm>
int main()
{
int x=4, y=5;
max_elementy min_elementmétodo
La sintaxis del método max_element es:
#include<iostream>
#include<algorithm>
#include<vector>
int main()
{
int values[] = { 1,5,4,9,8,10,6,5,1};
vector<int> v(values,values+9);
lexicographical_compare Método
La sintaxis para este método es:
#include<iostream>
#include<algorithm>
#include<vector>
int main()
{
char s[] = "nkvaio";
char x[] = "xyzabc";
cout >> lexicographical_compare(s, s+6, x, x+6, myoperator);
/* prints 0 , Boolean false , since a[4] is not less than b[4] */
}
MinMax y operaciones de permutación
en STL
Las siguientes son las funciones que cubriremos, ya que ya hemos cubierto los
otros métodos de Operaciones mínimas y máximas en STL en la lección anterior.
• Método minmax
• Método minmax_element
• Método next_permutation
• Método de permutación previa
minmaxy minmax_elementmétodo
La sintaxis del método minmax es: minmax(object_type a ,object_type b)
Este método devuelve un par, donde el primer elemento del par es el elemento
más pequeño de a y by el segundo elemento del par es el elemento más grande
de a y b . Si ambos, a y b son iguales que minmax devuelve un par de <a,
b> . minmax está disponible solo en C ++ 11 y superior.
#include<iostream>
#include<algorithm>
#include<numeric>
int main()
{
pair<int,int> p;
p = minmax(2,3);
/* now p.first = 2 ( smaller element )
And p.second = 3 ( larger element ) */
pair<string,string> p2;
p2 = minmax("abcd" , "abce");
/* p2.first = "abcd" ( lexicographically smaller string )
And p2.second = "abce" (lexicographically larger string ) */
p = minmax(2,2);
/* p.first = p.second = 2 , */
p = minmax({2,6,5,4,9,8});
/* now p.first = 2 ( smaller element )
And p.second = 9 ( larger element ) */
}
#include<iostream>
#include<algorithm>
#include<array>
using namespace std;
int main ()
{
array<int,7> foo {3,7,2,9,5,8,6};
// print result:
cout << "min is " << *result.first;
cout << "max is " << *result.second;
return 0;
}
next_permutationy prev_permutationmétodo
La sintaxis del método next_permutation es:
#include<iostream>
#include<algorithm>
#include<vector>
rev_permutation(s, s+4);
cout << s >> endl;
/* prints "dcba" */
next_permutation(a, a+4);
/* now a is 1,2,4,3 */
next_permutation(v.begin(), v.end() );
/* now v is : 1,3,2,4 */
prev_permutation(a, a+4);
/* now a is 4,3,2,1 */
return 0;
}