Menu
Coddy logo textTech

Visión general y filosofía de la STL

Parte de la sección Programación Orientada a Objetos del Journey de C++ de Coddy — lección 70 de 104.

La Standard Template Library (STL) es una colección de clases y funciones basadas en plantillas que proporcionan estructuras de datos y algoritmos comunes. Basada en los conceptos de plantillas que has aprendido, la STL encarna una poderosa filosofía de diseño: separar el almacenamiento de datos de la manipulación de datos.

La STL está organizada en torno a tres componentes principales que trabajan juntos:

ComponentePropósitoEjemplos
ContenedoresAlmacenan colecciones de objetosvector, map, set
IteradoresProporcionan acceso a los elementos del contenedorEntrada, salida, acceso aleatorio
AlgoritmosRealizan operaciones sobre los datossort, find, transform

La idea clave es que los algoritmos no conocen los contenedores directamente; funcionan a través de iteradores. Esto significa que un único algoritmo sort funciona con vectores, arreglos y cualquier contenedor que proporcione el tipo de iterador adecuado:

#include <vector>
#include <algorithm>
#include <iostream>

int main() {
    std::vector<int> nums = {5, 2, 8, 1, 9};
    
    std::sort(nums.begin(), nums.end());
    
    for (int n : nums) {
        std::cout << n << " ";
    }
    // Salida: 1 2 5 8 9
}

Esta separación significa que puedes mezclar y combinar: utiliza cualquier algoritmo con cualquier contenedor compatible sin escribir código nuevo. La STL proporciona implementaciones optimizadas y de eficacia probada para que puedas concentrarte en resolver problemas en lugar de reinventar estructuras de datos comunes.

challenge icon

Desafío

Fácil

Construyamos un sistema de procesamiento de datos simple que demuestre la filosofía de la STL de separar contenedores, iteradores y algoritmos. Crearás un módulo de utilidad que trabaje con componentes de la STL y un programa principal que muestre cómo encajan estas piezas.

Crearás dos archivos:

  • DataProcessor.h: Define funciones de utilidad que trabajen con contenedores de la STL a través de iteradores, demostrando la filosofía de diseño de la STL.

    Crea una función llamada printVector que reciba un std::vector<int>& e imprima todos los elementos separados por espacios, seguidos de un salto de línea. Usa iteradores (begin() y end()) para recorrer el contenedor.

    Crea una función llamada sortAndPrint que reciba un std::vector<int>&, lo ordene usando std::sort, y luego imprima los elementos ordenados separados por espacios seguidos de un salto de línea.

    Crea una función llamada findElement que reciba un std::vector<int>& y un valor int para buscar. Usa std::find para localizar el elemento. Si se encuentra, imprime Found: <value>. Si no se encuentra, imprime Not found: <value>.

    Crea una función llamada getSum que reciba un std::vector<int>& y devuelva la suma de todos los elementos. Puedes usar un bucle simple con iteradores para esto.

  • main.cpp: Lee las entradas y demuestra cómo los componentes de la STL trabajan juntos.

    Lee cinco entradas (cada una en una línea separada):

    1. Primer entero
    2. Segundo entero
    3. Tercer entero
    4. Cuarto entero
    5. Un valor para buscar

    Crea un std::vector<int> y añade los primeros cuatro enteros a él. Luego demuestra la filosofía de la STL mediante:

    1. Imprimir Original: seguido de la llamada a printVector
    2. Imprimir Sorted: seguido de la llamada a sortAndPrint
    3. Llamar a findElement con el valor de búsqueda
    4. Imprimir Sum: <result> usando getSum

Por ejemplo, con las entradas 5, 2, 8, 1, y 8:

Original: 5 2 8 1 
Sorted: 1 2 5 8 
Found: 8
Sum: 16

Con las entradas 10, 30, 20, 40, y 15:

Original: 10 30 20 40 
Sorted: 10 20 30 40 
Not found: 15
Sum: 100

Observa cómo tus funciones trabajan con el vector a través de iteradores, y cómo std::sort y std::find operan en cualquier contenedor que proporcione el tipo de iterador adecuado. Este es el poder del diseño de la STL: los algoritmos están desacoplados de los contenedores, conectados únicamente a través de iteradores.

Hoja de referencia

La Biblioteca de Plantillas Estándar (STL) es una colección de clases y funciones basadas en plantillas que proporcionan estructuras de datos y algoritmos comunes. Separa el almacenamiento de datos de la manipulación de datos.

La STL tiene tres componentes principales:

ComponentePropósitoEjemplos
ContenedoresAlmacenan colecciones de objetosvector, map, set
IteradoresProporcionan acceso a los elementos del contenedorEntrada, salida, acceso aleatorio
AlgoritmosRealizan operaciones sobre los datossort, find, transform

Los algoritmos funcionan a través de iteradores, no directamente con los contenedores. Esto permite que un solo algoritmo funcione con cualquier contenedor compatible:

#include <vector>
#include <algorithm>
#include <iostream>

int main() {
    std::vector<int> nums = {5, 2, 8, 1, 9};
    
    // Ordenar usando iteradores
    std::sort(nums.begin(), nums.end());
    
    // Recorrer usando iteradores
    for (int n : nums) {
        std::cout << n << " ";
    }
    // Salida: 1 2 5 8 9
}

Métodos comunes de iteradores:

  • begin() - devuelve un iterador al primer elemento
  • end() - devuelve un iterador a la posición después del último elemento

Algoritmos comunes de la STL:

  • std::sort(begin, end) - ordena los elementos en un rango
  • std::find(begin, end, value) - busca un valor en un rango

Pruébalo tú mismo

#include <iostream>
#include <vector>
#include "DataProcessor.h"

using namespace std;

int main() {
    // Lee cinco enteros de la entrada
    int num1, num2, num3, num4, searchValue;
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> num4;
    cin >> searchValue;
    
    // TODO: Crea un vector y añade los primeros cuatro enteros a él
    
    // TODO: Imprime "Original: " y llama a printVector
    
    // TODO: Imprime "Sorted: " y llama a sortAndPrint
    
    // TODO: Llama a findElement con el valor de búsqueda
    
    // TODO: Imprime "Sum: " seguido por el resultado de getSum
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos