0Pricing
C++ Academy · Lección

Conceptos básicos de std::span

Vistas no propietarias sobre datos contiguos

Conceptos básicos de std::span es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.

Una vista no propietaria

std::span<T> (C++20) es una vista ligera sobre una secuencia contigua, como string_view, pero para cualquier tipo de elemento. Incluya <span>.

#include <iostream>
#include <span>
#include <array>
int main() {
    std::array<int, 3> a = {1, 2, 3};
    std::span<int> s = a;
    std::cout << s.size() << "\n";
}

Los spans no son propietarios

Un span almacena un puntero y una longitud; observa datos que pertenecen a otro objeto y nunca copia los elementos.

#include <iostream>
#include <vector>
#include <span>
int main() {
    std::vector<int> v = {5, 6, 7};
    std::span<int> s = v;
    s[0] = 50; // modifies v
    std::cout << v[0] << "\n"; // 50
}

A partir de un std::array

Un array se convierte automáticamente en un span, y este puede ver todos sus elementos.

#include <iostream>
#include <span>
#include <array>
int main() {
    std::array<int, 4> a = {1, 2, 3, 4};
    std::span<int> s{a};
    for (int x : s) std::cout << x << " ";
    std::cout << "\n";
}

A partir de un vector

Un std::vector también se convierte en un span, lo que proporciona una vista uniforme independientemente del contenedor subyacente.

#include <iostream>
#include <vector>
#include <span>
int main() {
    std::vector<int> v = {9, 8, 7};
    std::span<int> s = v;
    std::cout << s.front() << " " << s.back() << "\n";
}

A partir de un puntero y un tamaño

Puede construir un span a partir de un puntero sin formato y un número de elementos, lo que resulta útil para búferes de estilo C.

#include <iostream>
#include <span>
int main() {
    int buf[] = {10, 20, 30};
    std::span<int> s(buf, 3);
    std::cout << s[1] << "\n"; // 20
}

Iterar un span

Los spans admiten bucles for basados en rangos y la interfaz habitual de los contenedores (size, front, back, data).

#include <iostream>
#include <span>
int main() {
    int buf[] = {2, 4, 6, 8};
    std::span<int> s(buf, 4);
    int sum = 0;
    for (int x : s) sum += x;
    std::cout << sum << "\n"; // 20
}

Spans de solo lectura

Un std::span<const int> proporciona acceso de solo lectura; úselo cuando una función no deba modificar los datos.

#include <iostream>
#include <span>
int main() {
    int buf[] = {1, 2, 3};
    std::span<const int> s(buf, 3);
    std::cout << s[2] << "\n"; // 3
}

Modificar a través de un span

Un span que no es const puede cambiar los elementos subyacentes, ya que apunta a los datos reales.

#include <iostream>
#include <span>
int main() {
    int buf[] = {1, 1, 1};
    std::span<int> s(buf, 3);
    for (int& x : s) x *= 10;
    std::cout << buf[2] << "\n"; // 10
}

Extensión dinámica frente a estática

De forma predeterminada, un span tiene un tamaño dinámico, pero puede fijarlo en tiempo de compilación mediante std::span<int, 3> para obtener comprobaciones adicionales.

Sin asignación y barato de pasar

Como todas las vistas, un span se copia y se pasa por valor con poco coste; solo contiene un puntero y una longitud.

Tenga en cuenta el tiempo de vida

Un span solo es válido mientras exista su origen y este no se reasigne. No conserve un span de un vector que pueda crecer posteriormente.

Comprobación rápida

Compruebe su comprensión de std::span.

Resumen

Ha aprendido los conceptos básicos de std::span:

  • Es una vista no propietaria sobre datos contiguos (array, vector o búfer sin formato).
  • Contiene un puntero y una longitud; no copia ni asigna memoria.
  • Los spans const son de solo lectura; los spans mutables modifican el origen.
  • Solo son válidos mientras exista el origen.

Preguntas frecuentes

¿La lección «Conceptos básicos de std::span» es gratis?

Sí — el texto completo de «Conceptos básicos de std::span» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Conceptos básicos de std::span»?

Vistas no propietarias sobre datos contiguos Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C++ Academy?

No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Conceptos básicos de std::span»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C++ Academy?

Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. std::array de tamaño fijo
  2. Conceptos básicos de std::span
  3. Pasar spans a funciones
  4. Límites y subspans
← Volver a C++ Academy