C ++ es uno de los lenguajes de programación más poderosos e intimidantes que puede encontrar como principiante. La razón es bastante sencilla. Requiere mucho código para lograr el resultado deseado. La biblioteca de plantillas estándar, o STL, puede ayudarlo a resolver este enigma.
Teniendo en cuenta la cantidad de tiempo y esfuerzo consumidos al escribir código para funciones como ordenar y buscar, STL puede ayudarlo a realizar todas estas operaciones con una sola línea de código. Esta biblioteca puede ser inmensamente útil para la resolución de problemas y la preparación de entrevistas técnicas.
¿Qué es la biblioteca de plantillas estándar?
La biblioteca de plantillas estándar, o STL, es una biblioteca de C ++ que consta de contenedores y funciones predefinidas. Incluye algunas clases de plantilla destacadas para estructuras de datos comunes como vectores, pilas, colas y algunas funciones algorítmicas útiles como la búsqueda binaria para facilitar la programación.
La biblioteca de plantillas estándar en C ++ consta de cuatro componentes:
- Algoritmos
- Contenedores
- Funciones
- Iteradores
Echemos un vistazo a los algoritmos y contenedores con mayor profundidad, ya que esos son los componentes de STL más utilizados.
Algoritmos en STL
La El archivo de encabezado es una parte del STL que consta de varias funciones algorítmicas que se pueden usar en lugar de codificarlas manualmente. Algunos de los algoritmos incluidos son búsqueda binaria, clasificación e inversión, que son extremadamente útiles.
Para empezar, debe importar el encabezado en su archivo C ++. La sintaxis es la siguiente:
#incluir
Para los próximos métodos, considere una variable de matriz con los valores de {6, 2, 9, 1, 4} como ejemplo.
int arr [] = {6, 2, 9, 1, 4};
clasificar()
La clasificar() La función le ayuda a ordenar todos los elementos dentro de la estructura de datos especificada en orden ascendente. Esta función toma dos parámetros: el iterador inicial y el iterador final.
Relacionados: Introducción al algoritmo de ordenación por fusión
Sintaxis:
sort (start_iterator, end_iterator);
Aquí tienes un ejemplo rápido:
ordenar (arr, arr + 5);
para (int i = 0; i <5; i ++) {
cout << arr [i] << "";
}
Producción:
1 2 4 6 9
contrarrestar()
La contrarrestar() La función invierte el orden de los elementos en la estructura de datos especificada. Acepta dos parámetros: el iterador inicial y el iterador final.
Sintaxis:
reverse (start_iterator, end_iterator);
Aquí hay un breve ejemplo del método anterior:
reverso (arr, arr + 5);
para (int i = 0; i <5; i ++) {
cout << arr [i] << "";
}
Producción:
4 1 9 2 6
* min_element () y * max_element ()
Las funciones * max_element () y * min_element () devuelve el valor máximo y mínimo dentro de la estructura de datos especificada, respectivamente. Ambas funciones aceptan dos argumentos: el iterador inicial y el iterador final.
Sintaxis:
* max_element (start_iterator, end_iterator);
* min_element (start_iterator, end_iterator);
Averigüemos qué valores devuelven estas funciones al llamarlas en la matriz de ejemplo:
cout << * elemento_máx (arr, arr + 5) << endl;
cout << * elemento_min (arr, arr + 5) << endl;
Producción:
9
1
búsqueda binaria()
La búsqueda binaria() El método se utiliza para encontrar si el valor especificado está presente dentro de la estructura de datos o no. Acepta tres argumentos: el iterador inicial, el iterador final y el valor que desea encontrar.
La búsqueda binaria solo funciona en estructuras de datos ordenadas. Por lo tanto, deberá llamar al clasificar() método primero antes del búsqueda binaria() método.
Sintaxis:
binary_search (start_iterator, end_iterator, value_to_find)
Aquí hay una demostración de este método:
ordenar (arr, arr + 5);
binary_search (arr, arr + 5, 2)? cout << "Elemento encontrado": cout << "Elemento no encontrado";
binary_search (arr, arr + 5, 7)? cout << "Elemento encontrado": cout << "Elemento no encontrado";
Producción:
Elemento encontrado
Elemento no encontrado
contar()
La contar() El método devuelve el recuento de ocurrencia del valor especificado dentro de la estructura de datos. Se necesitan tres argumentos: el iterador inicial, el iterador final y el valor para contar.
Sintaxis:
count (start_iterator, end_iterator, value_to_count);
A continuación, se muestra un ejemplo de este método:
cout << contar (arr, arr + 5, 2) << endl;
Producción:
1
Contenedores en STL
Los contenedores son las estructuras de datos que almacenan objetos y datos. Vectores, listas, pilas, colas, conjuntos y mapas son algunos de los ejemplos que almacenan datos en ellos de acuerdo con el tipo de datos primitivo especificado. Puede utilizar estos contenedores importando sus respectivos encabezados en el archivo C ++.
Al inicializar la variable de contenedor, debe mencionar los datos primitivos como En t, carbonizarse, cuerda dentro de <> soportes.
Exploremos algunos de estos contenedores con mayor detalle:
Vector
Los vectores son matrices dinámicas que son redimensionables y flexibles para trabajar. Cuando inserta o elimina un elemento del vector, ajusta automáticamente el tamaño del vector. Esto es similar al Estructura de datos ArrayList en Java.
Sintaxis:
#incluir
vector nombre de la variable;
A continuación, se muestran algunos métodos vectoriales importantes:
- push_back (valor): Este método agrega los datos al vector.
- pop_back (): Este método elimina el último elemento del vector.
- insertar (índice, valor): Este método inserta nuevos elementos antes del elemento en la posición especificada.
- Talla(): Este método devuelve el tamaño del vector.
- vacío(): Este método comprueba si el vector está vacío o no.
- parte delantera(): Este método devuelve el primer valor del vector.
- espalda(): El método back devuelve el último valor del vector.
- en (índice): Este método devuelve el valor en la posición especificada.
- borrar (índice): El método de borrado elimina elementos del índice dado.
- claro(): Este método borra todos los elementos del vector.
vector v = {23, 12, 56, 10};
v.push_back (5);
v.push_back (25);
v.pop_back ();
auto i = v.insert (v.begin () + 1, 7);
cout << "El tamaño del vector dado" << v.size () << endl;
if (v.empty ()) {
cout << "El vector está vacío" << endl;
} demás {
cout << "El vector no está vacío" << endl;
}
cout << "El elemento en la primera posición es" << v.front () << endl;
cout << "El elemento en la última posición es" << v.back () << endl;
cout << "El elemento en la posición dada es" << v.at (4) << endl;
v.erase (v.begin () + 1);
para (int i = 0; i cout << v [i] << "";
}
Producción:
El tamaño del vector dado 6
El vector no está vacío
El elemento en la primera posición es 23
El elemento en la última posición es 5
El elemento en la posición dada es 10
23 12 56 10 5
Cola
En la estructura de datos de la cola, los elementos se insertan desde atrás y se eliminan desde el frente. Por lo tanto, sigue el enfoque FIFO ("primero en entrar, primero en salir").
Sintaxis:
#incluir
cola nombre de la variable;
A continuación, se muestran algunos métodos de cola importantes:
- empujar (valor): Este método agrega elementos a la cola.
- música pop(): Este método elimina el primer elemento de la cola.
- Talla(): Este método devuelve el tamaño de la cola.
- parte delantera(): Este método devuelve el primer elemento de la cola.
- espalda(): Este método devuelve el último elemento de la cola.
cola q;
q.push (30);
q.push (40);
q.push (50);
q.push (60);
q.push (70);
cout << "El primer elemento es" << q.front () << endl;
cout << "El último elemento es" << q.back () << endl;
cout << "El tamaño de la cola es" << q.size () << endl;
q.pop ();
cout << "Imprimiendo todos los elementos de la Cola" << endl;
while (! q.empty ()) {
cout << q.front () << "";
q.pop ();
}
Producción:
El primer elemento es 30
El último elemento es 70
El tamaño de la cola es 5
Imprimiendo todos los elementos de la Cola
40 50 60 70
Apilar
Los contenedores apilados funcionan con el método LIFO. LIFO significa "último en entrar, primero en salir". Los datos se empujan y se extraen desde el mismo extremo.
Sintaxis:
#incluir
apilar nombre de la variable;
A continuación, se muestran algunos métodos de pila importantes:
- empujar (valor): Este método inserta el elemento en la pila.
- música pop(): Este método elimina el elemento superior de la pila.
- cima(): Este método devuelve el valor del último elemento ingresado en la pila.
- Talla(): Este método devuelve el tamaño de la pila.
- vacío(): Este método comprueba si la pila está vacía o no.
apilar s;
s.push (30);
s.push (40);
s.push (50);
s.push (60);
cout << "La parte superior de la pila contiene" << s.top () << endl;
s.pop ();
cout << "La parte superior de la pila después de realizar la operación pop:" << s.top () << endl;
cout << "Imprimiendo todos los elementos de la pila" << endl;
while (! s.empty ()) {
cout << s.top () << "";
s.pop ();
}
Producción:
La parte superior de la pila contiene 60
La parte superior de la pila después de realizar la operación pop: 50
Imprimir todos los elementos de la pila
50 40 30
Colocar
Los contenedores de conjuntos se utilizan para contener valores únicos y el valor del elemento no se puede cambiar una vez que se inserta en el conjunto. Todos los elementos del conjunto se almacenan de forma ordenada. El contenedor configurado es similar al establecer la estructura de datos en Python.
Sintaxis:
#incluir
colocar nombre de la variable;
A continuación, se muestran algunos métodos de conjuntos importantes:
- insertar (valor): Este método inserta elementos en el conjunto.
- empezar(): Este método devuelve el iterador al primer elemento del conjunto.
- final(): Este método devuelve el iterador al último elemento del conjunto.
- Talla(): Este método devuelve el tamaño del conjunto.
- vacío(): Este método comprueba si el conjunto está vacío o no.
- encontrar (valor): Este método devuelve el iterador al elemento pasado en el parámetro. Si no se encuentra el elemento, esta función devuelve el iterador al final del conjunto.
- borrar (valor): Este método eliminó el elemento especificado del conjunto.
establecer s;
s.insertar (20);
s.insertar (30);
s.insertar (40);
s.insertar (50);
s.insertar (60);
s.insertar (60);
s.insertar (60);
auto i = s.begin ();
cout << "Elemento en la primera posición" << * i << endl;
cout << "El tamaño del conjunto" << s.size () << endl;
s.find (20)! = s.find ()? cout << "Elemento encontrado" << endl: cout << "Elemento no encontrado" << endl;
borrar (30);
cout << "Imprimiendo todos los elementos" << endl;
para (auto i = s.begin (); i! = al final (); i ++) {
cout << * i << "";
}
Producción:
Elemento en la primera posición 20
El tamaño del conjunto 5
Elemento encontrado
Imprimiendo todos los elementos
20 40 50 60
C ++ no tiene por qué ser difícil
Al igual que cualquier otra habilidad, la práctica es esencial para aprovechar al máximo el STL. Estos contenedores y algoritmos pueden ayudarlo a ahorrar mucho tiempo y son fáciles de usar. Comience practicando los ejemplos que se muestran arriba y eventualmente comenzará a usarlo también en sus propios proyectos.
Sin embargo, si es la primera vez que aprende C ++, comience por aprender los conceptos básicos antes de proceder a comprender el STL.
¿Quieres aprender C ++? Aquí están los mejores sitios web y cursos en línea de C ++ tanto para principiantes como para programadores experimentados.
Leer siguiente
- Programación
- Tutoriales de codificación
- Programación funcional
Nitin es un ávido desarrollador de software y un estudiante de ingeniería informática que desarrolla aplicaciones web utilizando tecnologías JavaScript. Trabaja como desarrollador web autónomo y le gusta escribir para Linux y Programación en su tiempo libre.
Suscríbete a nuestro boletín
¡Únase a nuestro boletín de noticias para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!
Un paso más…!
Confirme su dirección de correo electrónico en el correo electrónico que le acabamos de enviar.