Leichte String-Verarbeitung mit std::string_view in C++
Lernen Sie std::string_view in C++, um Strings effizient und ohne unnötige Kopien zu verarbeiten.
Mit C++17 wurde std::string_view eingeführt – eine leichte, hochperformante String-Abstraktion,
die es ermöglicht, mit Text zu arbeiten, ohne ihn zu kopieren.
Im Vergleich zu std::string ist string_view deutlich schneller, da es keinen Speicher besitzt
und nicht neu alloziert – es stellt lediglich eine Ansicht (view) auf vorhandene Daten bereit.
In diesem Artikel werden die Vorteile, Anwendungsfälle und wichtigen Vorsichtsmaßnahmen von string_view erläutert.
1) Was ist string_view?
std::string_view stellt einen String oder einen Teil davon dar, ohne die Daten zu kopieren. Intern speichert es nur:
- einen Zeiger auf den Anfang des Textes
- die Länge des Textes
Das bedeutet: string_view besitzt die Daten nicht – es verweist nur darauf.
#include <string_view>
#include <iostream>
using namespace std;
int main() {
string text = "Hallo Welt";
string_view sv = text;
cout << sv << endl;
}
2) Leistungsvorteile von string_view
std::string → kopiert Daten
Das Kopieren kann teuer sein, besonders bei großen Textmengen.
std::string_view → kopiert NICHT
Es speichert nur Zeiger + Länge. Dadurch ist es extrem schnell und ideal für Parsing, Log-Analyse, Konfigurationsdateien und viele andere textlastige Aufgaben.
3) Teilstrings mit string_view
string_view sv = "C++ Programmiersprache";
auto first = sv.substr(0, 3); // "C++"
auto second = sv.substr(4, 14); // "Programmiersprache"
cout << first << " | " << second;
4) Whitespaces entfernen (trim)
string_view trim(string_view sv) {
while (!sv.empty() && isspace(sv.front()))
sv.remove_prefix(1);
while (!sv.empty() && isspace(sv.back()))
sv.remove_suffix(1);
return sv;
}
int main() {
string_view text = " Hallo ";
string_view cleaned = trim(text);
cout << "[" << cleaned << "]";
}
Ausgabe: [Hallo]
5) Strings mit string_view splitten
#include <vector>
vector<string_view> split(string_view sv, char delimiter) {
vector<string_view> parts;
size_t start = 0;
while (true) {
size_t pos = sv.find(delimiter, start);
if (pos == string_view::npos) {
parts.push_back(sv.substr(start));
break;
}
parts.push_back(sv.substr(start, pos - start));
start = pos + 1;
}
return parts;
}
int main() {
string_view text = "cpp,java,python";
auto parts = split(text, ',');
for (auto p : parts)
cout << p << endl;
}
6) Wichtige Hinweise zur Nutzung von string_view
- Warnung: string_view besitzt die Daten NICHT.
- Daher: Wenn der zugrunde liegende Speicher ungültig wird, wird auch string_view ungültig.
Gefährliches Beispiel
string_view danger() {
string temp = "Hallo"; // wird am Ende der Funktion zerstört!
return temp; // GEFÄHRLICH!
}
Ergebnis: undefiniertes Verhalten.
Richtiges Beispiel
string globalText = "Sicher";
string_view sv = globalText; // sicher
7) Vergleich von string_view
string_view a = "cpp";
string_view b = "cpp";
if (a == b)
cout << "Gleich";
string_view unterstützt direkten Vergleich des Inhalts.
8) Praxisbeispiel — Kommandoanalyse
void parseCommand(string_view cmd) {
if (cmd.starts_with("add"))
cout << "Add-Befehl";
else if (cmd.starts_with("delete"))
cout << "Delete-Befehl";
}
int main() {
parseCommand("add user");
}
9) Wann sollte man string_view verwenden?
- Bei großen Textmengen
- Für schnelle Teilstring-Operationen
- Wenn Speicherallokationen vermieden werden sollen
- Bei performancekritischem Parsing
10) TL;DR
- string_view: leichter, nicht besitzender String-Typ.
- Extrem schnell für Substring-Operationen.
- Achtung: Der zugrunde liegende Text muss gültig bleiben.
- Ideal für Parsing, Log-Analyse und Konfigurationsdateien.
- Alle Beispiele funktionieren mit Visual Studio 2022 und GCC.
Ähnliche Artikel
Einführung in Funktionen in C++: Definieren, Aufrufen, Parameter
Lernen Sie Funktionen in C++ mit Definition, Aufruf und Parametern für modulare und wiederverwendbare Programme.
String-Verarbeitung in C++: C-Style und std::string
Lernen Sie String-Verarbeitung in C++ mit C-Style-Strings und std::string anhand praktischer Beispiele.
Überblick über die C++-Standardbibliothek
Lernen Sie die C++-Standardbibliothek mit STL-Containern, Algorithmen und wichtigen Komponenten für moderne C++-Entwicklung.