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.

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