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
constson 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
- std::array de tamaño fijo
- Conceptos básicos de std::span
- Pasar spans a funciones
- Límites y subspans