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
- std::array fester Größe
- std::span-Grundlagen
- Spans an Funktionen übergeben
- Grenzen und Subspans