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 de los contenedoresEntrada, salida, acceso aleatorio
AlgoritmosRealizan operaciones sobre los datossort, find, transform

La idea clave es que los algoritmos no conocen directamente los contenedores: funcionan mediante iteradores. Esto significa que un único algoritmo sort funciona con vectores, matrices 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 combinar y ajustar elementos: usar cualquier algoritmo con cualquier contenedor compatible sin escribir código nuevo. La STL proporciona implementaciones optimizadas y probadas en batalla, para que puedas centrarte en resolver problemas en lugar de reinventar estructuras de datos comunes.

challenge icon

Desafío

Fácil

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

Crearás dos archivos:

  • DataProcessor.h: Define funciones de utilidad que funcionen con contenedores de STL mediante iteradores, demostrando la filosofía de diseño de STL.

    Crea una función llamada printVector que reciba un std::vector<int>& e imprima todos los elementos separados por espacios, seguidos de una nueva 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 después imprima los elementos ordenados separados por espacios, seguidos de una nueva línea.

    Crea una función llamada findElement que reciba un std::vector<int>& y un valor int que 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 sencillo con iteradores para esto.

  • main.cpp: Lee los datos de entrada y demuestra cómo funcionan juntos los componentes de STL.

    Lee cinco valores de entrada, cada uno en una línea separada:

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

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

    1. Imprimir Original: y después llamar a printVector
    2. Imprimir Sorted: y después llamar 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 mediante iteradores y cómo std::sort y std::find operan sobre cualquier contenedor que proporcione el tipo de iterador adecuado. Este es el poder del diseño de STL: los algoritmos están desacoplados de los contenedores y conectados únicamente mediante 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 del 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

Practica por tu cuenta: Compilador de C++ online