0Pricing
C++ Academy · Lektion

std::span-Grundlagen

Besitzlose Views über zusammenhängende Daten

std::span-Grundlagen ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Eine nicht besitzende Ansicht

std::span<T> (C++20) ist eine leichtgewichtige Ansicht auf eine zusammenhängende Sequenz, ähnlich wie string_view, aber für jeden Elementtyp. Binden Sie <span> ein.

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

Spans besitzen keine Elemente

Ein Span speichert einen Zeiger und eine Länge. Er beobachtet Daten, die an anderer Stelle besessen werden, und kopiert die Elemente niemals.

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

Aus einem std::array

Ein Array wird automatisch in einen Span konvertiert; der Span umfasst alle seine Elemente.

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

Aus einem vector

Auch ein std::vector wird in einen Span konvertiert und bietet damit unabhängig vom zugrunde liegenden Container eine einheitliche Ansicht.

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

Aus Zeiger und Größe

Sie können einen Span aus einem rohen Zeiger und einer Anzahl von Elementen erstellen, was für Puffer im C-Stil nützlich ist.

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

Über einen Span iterieren

Spans unterstützen bereichsbasierte for-Schleifen und die übliche Container-Schnittstelle (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
}

Nur lesbare Spans

Ein std::span<const int> gewährt nur lesenden Zugriff. Verwenden Sie ihn, wenn eine Funktion die Daten nicht verändern soll.

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

Ändern über einen Span

Ein nicht-const Span kann die zugrunde liegenden Elemente ändern, da er auf die tatsächlichen Daten zeigt.

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

Dynamischer oder statischer Extent

Standardmäßig hat ein Span eine dynamische Größe. Sie können sie jedoch mit std::span<int, 3> zur Compile-Zeit festlegen und so zusätzliche Prüfungen erhalten.

Keine Allokation, günstig zu übergeben

Wie alle Ansichten lässt sich ein Span kostengünstig kopieren und per Wert übergeben; er enthält lediglich einen Zeiger und eine Länge.

Achten Sie auf die Lebensdauer

Ein Span ist nur gültig, solange seine Quelle existiert und nicht neu allokiert wird. Behalten Sie keinen Span auf einen vector, der später wächst.

Kurze Überprüfung

Überprüfen Sie Ihr Verständnis von std::span.

Zusammenfassung

Sie haben die Grundlagen von std::span kennengelernt:

  • Nicht besitzende Ansicht auf zusammenhängende Daten (Array, vector, roher Puffer).
  • Enthält einen Zeiger und eine Länge; keine Kopie und keine Allokation.
  • const-Spans sind schreibgeschützt; veränderbare Spans bearbeiten die Quelle.
  • Nur gültig, solange die Quelle existiert.

Häufig gestellte Fragen

Ist die Lektion „std::span-Grundlagen“ kostenlos?

Ja — der vollständige Text von „std::span-Grundlagen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „std::span-Grundlagen“?

Besitzlose Views über zusammenhängende Daten Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C++ Academy zu starten?

Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „std::span-Grundlagen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?

Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. std::array fester Größe
  2. std::span-Grundlagen
  3. Spans an Funktionen übergeben
  4. Grenzen und Subspans
← Zurück zu C++ Academy