0Pricing
C++ Academy · Leçon

Les bases de std::span

Créer des vues non propriétaires sur des données contiguës

Les bases de std::span est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.

Une vue non propriétaire

std::span<T> (C++20) est une vue légère sur une séquence contiguë, comme string_view, mais pour n'importe quel type d'élément. Incluez <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";
}

Les vues span ne sont pas propriétaires

Une vue span stocke un pointeur et une longueur ; elle observe des données appartenant à un autre objet et ne copie jamais les éléments.

#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
}

Depuis un std::array

Un tableau se convertit automatiquement en vue span ; la vue donne accès à tous ses éléments.

#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";
}

Depuis un vecteur

Un std::vector se convertit également en vue span, ce qui fournit une vue uniforme quel que soit le conteneur sous-jacent.

#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";
}

Depuis un pointeur et une taille

Vous pouvez construire une vue span à partir d'un pointeur brut et d'un nombre d'éléments, ce qui est utile pour les tampons de style C.

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

Parcourir une vue span

Les vues span prennent en charge les boucles for basées sur une plage et l'interface habituelle des conteneurs (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
}

Vues en lecture seule

Une std::span<const int> fournit un accès en lecture seule ; utilisez-la lorsqu'une fonction ne doit pas modifier les données.

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

Modifier au moyen d'une vue span

Une vue span non const peut modifier les éléments sous-jacents, puisqu'elle pointe vers les données réelles.

#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
}

Étendue dynamique ou statique

Par défaut, une vue span a une taille dynamique, mais vous pouvez la fixer à la compilation avec std::span<int, 3> pour effectuer des vérifications supplémentaires.

Aucune allocation, passage peu coûteux

Comme toutes les vues, une vue span est peu coûteuse à copier et à transmettre par valeur : elle ne contient qu'un pointeur et une longueur.

Attention à la durée de vie

Une vue span n'est valide que tant que sa source existe et n'est pas réallouée. Ne conservez pas une vue span vers un vecteur qui s'agrandit par la suite.

Vérification rapide

Vérifiez votre compréhension de std::span.

Récapitulatif

Vous avez appris les bases de std::span :

  • Vue non propriétaire sur des données contiguës (tableau, vecteur, tampon brut).
  • Contient un pointeur et une longueur ; aucune copie ni allocation.
  • Les vues const sont en lecture seule ; les vues modifiables modifient la source.
  • Valide uniquement tant que la source existe.

Questions Fréquemment Posées

La leçon « Les bases de std::span » est-elle gratuite ?

Oui — le texte complet de « Les bases de std::span » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Les bases de std::span » ?

Créer des vues non propriétaires sur des données contiguës Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C++ Academy ?

Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Les bases de std::span » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?

Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. std::array de taille fixe
  2. Les bases de std::span
  3. Passer des spans aux fonctions
  4. Limites et sous-spans
← Retour à C++ Academy