std::basic_string
| Definiert im Header <string>
|
||
template<
class CharT,
class Traits = std::char_traits<CharT>,
class Allocator = std::allocator<CharT>
> class basic_string;
|
(1) | |
namespace pmr {
template<
class CharT,
class Traits = std::char_traits<CharT>
> using basic_string =
std::basic_string<CharT, Traits, std::pmr::polymorphic_allocator<CharT>>;
}
|
(2) | (seit C++17) |
Die Klassenvorlage basic_string speichert und manipuliert Sequenzen von zeichenähnlichen Objekten, bei denen es sich um Nicht-Array-Objekte von TrivialType und StandardLayoutType handelt. Die Klasse ist weder vom Zeichentyp noch von der Art der Operationen auf diesem Typ abhängig. Die Definitionen der Operationen werden über den Traits-Vorlagenparameter bereitgestellt – eine Spezialisierung von std::char_traits oder einer kompatiblen Traits-Klasse.
Die Elemente eines basic_string werden zusammenhängend gespeichert, das heißt, für ein basic_string s, &*(s.begin() + n) == &*s.begin() + n für jedes n in [0, s.size()), und *(s.begin() + s.size()) hat den Wert CharT() (ein Nullterminator)(seit C++11); oder äquivalent, ein Zeiger auf s[0] kann an Funktionen übergeben werden, die einen Zeiger auf das erste Element von einem Array(bis C++11)einem nullterminierten Array(seit C++11) von CharT erwarten.
std::basic_string erfüllt die Anforderungen von AllocatorAwareContainer (außer dass benutzerdefinierte construct/destroy nicht für die Konstruktion/Zerstörung von Elementen verwendet werden), SequenceContainer und ContiguousContainer(seit C++17).
Wenn einer von Traits::char_type und Allocator::char_type sich von CharT unterscheidet, ist das Programm fehlerhaft (ill-formed).
|
Alle Mitgliedsfunktionen von
Die Definition einer |
(seit C++20) |
Mehrere Typedefs für gebräuchliche Zeichentypen werden bereitgestellt:
Definiert im Header
<string> | |
| Typ | Definition |
std::string
|
std::basic_string<char>
|
std::wstring
|
std::basic_string<wchar_t>
|
std::u8string (C++20)
|
std::basic_string<char8_t>
|
std::u16string (C++11)
|
std::basic_string<char16_t>
|
std::u32string (C++11)
|
std::basic_string<char32_t>
|
std::pmr::string (C++17)
|
std::pmr::basic_string<char>
|
std::pmr::wstring (C++17)
|
std::pmr::basic_string<wchar_t>
|
std::pmr::u8string (C++20)
|
std::pmr::basic_string<char8_t>
|
std::pmr::u16string (C++17)
|
std::pmr::basic_string<char16_t>
|
std::pmr::u32string (C++17)
|
std::pmr::basic_string<char32_t>
|
Template-Parameter
| CharT | - | Zeichentyp |
| Traits | - | Traits-Klasse, die die Operationen für den Zeichentyp spezifiziert |
| Allocator | - | Allocator Typ, der zur Allokation von internem Speicher verwendet wird |
Verschachtelte Typen
| Typ | Definition | ||||
traits_type
|
Traits
|
||||
value_type
|
CharT
|
||||
allocator_type
|
Allocator
|
||||
size_type
|
|
||||
difference_type
|
|
||||
reference
|
value_type & | ||||
const_reference
|
const value_type & | ||||
pointer
|
|
||||
const_pointer
|
|
||||
iterator
|
|
||||
const_iterator
|
|
||||
reverse_iterator
|
std:: reverse_iterator < iterator > | ||||
const_reverse_iterator
|
std:: reverse_iterator < const_iterator > |
Datenmitglieder
constexpr
size_type
npos
[static]
|
der spezielle Wert size_type ( - 1 ) , dessen genaue Bedeutung vom Kontext abhängt |
Memberfunktionen
konstruiert einen
basic_string
(öffentliche Elementfunktion) |
|
|
zerstört den String, gibt internen Speicher frei falls verwendet
(public member function) |
|
|
weist der Zeichenkette Werte zu
(öffentliche Elementfunktion) |
|
|
Zeichen einer Zeichenkette zuweisen
(öffentliche Elementfunktion) |
|
|
(C++23)
|
weist einen Bereich von Zeichen einem String zu
(öffentliche Elementfunktion) |
|
gibt den zugeordneten Allokator zurück
(öffentliche Elementfunktion) |
|
Elementzugriff |
|
|
greift auf das angegebene Zeichen mit Grenzüberprüfung zu
(öffentliche Elementfunktion) |
|
|
greift auf das angegebene Zeichen zu
(öffentliche Elementfunktion) |
|
|
(
DR*
)
|
greift auf das erste Zeichen zu
(öffentliche Elementfunktion) |
|
(
DR*
)
|
greift auf das letzte Zeichen zu
(öffentliche Elementfunktion) |
|
gibt einen Zeiger auf das erste Zeichen einer Zeichenkette zurück
(öffentliche Elementfunktion) |
|
|
gibt eine nicht modifizierbare Standard-C-Zeichenarray-Version der Zeichenkette zurück
(öffentliche Elementfunktion) |
|
|
(C++17)
|
gibt eine nicht modifizierbare
basic_string_view
der gesamten Zeichenkette zurück
(öffentliche Elementfunktion) |
Iteratoren |
|
|
(C++11)
|
gibt einen Iterator zum Anfang zurück
(öffentliche Elementfunktion) |
|
(C++11)
|
gibt einen Iterator zum Ende zurück
(öffentliche Elementfunktion) |
|
(C++11)
|
gibt einen Reverse-Iterator zum Anfang zurück
(öffentliche Member-Funktion) |
|
(C++11)
|
gibt einen Reverse-Iterator zum Ende zurück
(öffentliche Member-Funktion) |
Kapazität |
|
|
prüft, ob die Zeichenkette leer ist
(öffentliche Elementfunktion) |
|
|
gibt die Anzahl der Zeichen zurück
(öffentliche Elementfunktion) |
|
|
gibt die maximale Anzahl von Zeichen zurück
(öffentliche Elementfunktion) |
|
|
Speicher reservieren
(öffentliche Elementfunktion) |
|
|
gibt die Anzahl der Zeichen zurück, die im aktuell allozierten Speicherplatz aufgenommen werden können
(öffentliche Elementfunktion) |
|
|
(
DR*
)
|
Reduziert die Speichernutzung durch Freigabe ungenutzten Speichers
(öffentliche Elementfunktion) |
Modifikatoren |
|
|
löscht den Inhalt
(öffentliche Elementfunktion) |
|
|
fügt Zeichen ein
(öffentliche Elementfunktion) |
|
|
(C++23)
|
fügt einen Bereich von Zeichen ein
(öffentliche Elementfunktion) |
|
entfernt Zeichen
(öffentliche Elementfunktion) |
|
|
hängt ein Zeichen am Ende an
(öffentliche Elementfunktion) |
|
|
(
DR*
)
|
entfernt das letzte Zeichen
(öffentliche Elementfunktion) |
|
fügt Zeichen am Ende hinzu
(öffentliche Elementfunktion) |
|
|
(C++23)
|
fügt einen Bereich von Zeichen am Ende an
(öffentliche Elementfunktion) |
|
fügt Zeichen am Ende an
(öffentliche Elementfunktion) |
|
|
ersetzt angegebenen Teil eines Strings
(öffentliche Elementfunktion) |
|
|
(C++23)
|
ersetzt einen bestimmten Teilbereich einer Zeichenkette mit einem Zeichenbereich
(öffentliche Elementfunktion) |
|
kopiert Zeichen
(öffentliche Elementfunktion) |
|
|
ändert die Anzahl der gespeicherten Zeichen
(öffentliche Elementfunktion) |
|
|
(C++23)
|
ändert die Anzahl der gespeicherten Zeichen und überschreibt möglicherweise unbestimmte Inhalte über eine benutzerbereitgestellte Operation
(öffentliche Elementfunktion) |
|
tauscht die Inhalte aus
(öffentliche Elementfunktion) |
|
Suche |
|
|
findet das erste Vorkommen der angegebenen Teilzeichenkette
(öffentliche Elementfunktion) |
|
|
finde das letzte Vorkommen eines Teilstrings
(öffentliche Elementfunktion) |
|
|
finde erstes Vorkommen von Zeichen
(öffentliche Elementfunktion) |
|
|
Findet erste Abwesenheit von Zeichen
(öffentliche Elementfunktion) |
|
|
Suche letztes Vorkommen von Zeichen
(öffentliche Elementfunktion) |
|
|
Letzte Abwesenheit von Zeichen finden
(öffentliche Elementfunktion) |
|
Operationen | |
| vergüt zwei Zeichenketten (öffentliche Elementfunktion) | |
(C++20) |
prüft, ob die Zeichenkette mit dem angegebenen Präfix beginnt (öffentliche Elementfunktion) |
(C++20) |
prüft, ob die Zeichenkette mit dem angegebenen Suffix endet (öffentliche Elementfunktion) |
(C++23) |
prüft, ob die Zeichenkette die angegebene Teilzeichenkette oder das angegebene Zeichen enthält (öffentliche Elementfunktion) |
| gibt eine Teilzeichenkette zurück (öffentliche Elementfunktion) | |
(C++26) |
gibt eine Teilansicht zurück (öffentliche Elementfunktion) |
Nicht-Member-Funktionen
|
verkettet zwei Zeichenketten, eine Zeichenkette und ein
char
, oder eine Zeichenkette und
string_view
(Funktionsschablone) |
|
|
(entfernt in C++20)
(entfernt in C++20)
(entfernt in C++20)
(entfernt in C++20)
(entfernt in C++20)
(C++20)
|
vergleicht zwei Zeichenketten lexikographisch
(Funktionsschablone) |
|
spezialisiert den
std::swap
Algorithmus
(Funktionsschablone) |
|
|
löscht alle Elemente, die bestimmte Kriterien erfüllen
(Funktionsschablone) |
|
Eingabe/Ausgabe |
|
|
führt Strom-Ein- und Ausgabe auf Zeichenketten durch
(Funktionsschablone) |
|
|
liest Daten aus einem I/O-Strom in eine Zeichenkette
(Funktionsschablone) |
|
Numerische Konvertierungen |
|
|
(C++11)
(C++11)
(C++11)
|
konvertiert eine Zeichenkette in eine vorzeichenbehaftete Ganzzahl
(Funktion) |
|
(C++11)
(C++11)
|
konvertiert eine Zeichenkette in eine vorzeichenlose Ganzzahl
(Funktion) |
|
(C++11)
(C++11)
(C++11)
|
konvertiert eine Zeichenkette in einen Gleitkommawert
(Funktion) |
|
(C++11)
|
konvertiert einen Ganzzahl- oder Gleitkommawert in
string
(Funktion) |
|
(C++11)
|
konvertiert einen Ganzzahl- oder Gleitkommawert in
wstring
(Funktion) |
Literale
|
Definiert im Inline-Namespace
std::literals::string_literals
|
|
|
(C++14)
|
konvertiert ein Zeichenarray-Literal zu
basic_string
(Funktion) |
Hilfsklassen
|
(C++11)
|
Hash-Unterstützung für Strings
(Klassen-Template-Spezialisierung) |
Deduction guides (seit C++17)
Iterator-Invalidierung
Referenzen, Zeiger und Iteratoren, die auf die Elemente eines
basic_string
verweisen, können durch jede Standardbibliotheksfunktion ungültig werden, die eine Referenz auf einen nicht-konstanten
basic_string
als Argument nimmt, wie z.B.
std::getline
,
std::swap
, oder
operator>>
, sowie durch den Aufruf nicht-konstanter Memberfunktionen, außer
operator[]
,
at
,
data
,
front
,
back
,
begin
,
rbegin
,
end
, und
rend
.
Hinweise
Obwohl es bis C++23 erforderlich war, dass benutzerdefinierte
construct
oder
destroy
verwendet werden, wenn Elemente von
std::basic_string
konstruiert oder zerstört werden, haben alle Implementierungen nur den Standardmechanismus verwendet. Die Anforderung wurde durch
P1072R10
korrigiert, um der bestehenden Praxis zu entsprechen.
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_string_udls
|
201304L
|
(C++14) | Benutzerdefinierte Literale für String-Typen |
__cpp_lib_starts_ends_with
|
201711L
|
(C++20) |
starts_with
,
ends_with
|
__cpp_lib_constexpr_string
|
201907L
|
(C++20) |
Constexpr für
std::basic_string
|
__cpp_lib_char8_t
|
201907L
|
(C++20) |
std::u8string
|
__cpp_lib_erase_if
|
202002L
|
(C++20) |
erase
,
erase_if
|
__cpp_lib_string_contains
|
202011L
|
(C++23) |
contains
|
__cpp_lib_string_resize_and_overwrite
|
202110L
|
(C++23) |
resize_and_overwrite
|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Memberfunktionen für Konstruktion, Einfügung und Ersetzung, die container-kompatible Bereiche akzeptieren |
Beispiel
#include <iostream> #include <string> int main() { using namespace std::literals; // Erstellen eines Strings aus const char* std::string str1 = "hello"; // Erstellen eines Strings mit String-Literal auto str2 = "world"s; // Verketten von Strings std::string str3 = str1 + " " + str2; // Ausgabe des Ergebnisses std::cout << str3 << '\n'; std::string::size_type pos = str3.find(" "); str1 = str3.substr(pos + 1); // Teil nach dem Leerzeichen str2 = str3.substr(0, pos); // Teil bis zum Leerzeichen std::cout << str1 << ' ' << str2 << '\n'; // Zugriff auf ein Element mit dem Indexoperator[] std::cout << str1[0] << '\n'; str1[0] = 'W'; std::cout << str1 << '\n'; }
Ausgabe:
hello world world hello w World
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 530 | C++98 |
Kontiguität des Speichers für Elemente von
basic_string
wurde versehentlich nicht mehr erforderlich gemacht durch LWG259 |
wieder erforderlich gemacht |
| LWG 2861 | C++98 |
value_type
war
Traits::char_type
|
geändert zu
CharT
|
|
LWG 2994
( P1148R0 ) |
C++98 |
das Verhalten ist undefiniert falls einer von
Traits::char_type
[1]
und
Allocator::char_type
sich von
CharT
unterscheidet
|
das Programm ist
in diesem Fall fehlerhaft |
Siehe auch
|
(C++17)
|
schreibgeschützte String-Ansicht
(Klassen-Template) |
Externe Links
| C++-Stringbehandlung |