std::basic_string
| Definiert in Header <string> |
||
| template< class CharT, |
(1) | |
| namespace pmr { template< |
(2) | (seit C++17) |
Die Klassenvorlage basic_string speichert und manipuliert Sequenzen von zeichenähnlichen Objekten, die keine Array-Objekte des Typs TrivialType und StandardLayoutType sind. Die Klasse ist weder vom Zeichentyp noch von der Art der Operationen auf diesem Typ abhängig. Die Definitionen der Operationen werden über den Template-Parameter Traits bereitgestellt – eine Spezialisierung von std::char_traits oder eine kompatible Traits-Klasse.
Die Elemente eines basic_string werden zusammenhängend gespeichert, d. h. für einen basic_string s gilt &*(s.begin() + n) == &*s.begin() + n für jedes n in [0, s.size()), und *(s.begin() + s.size()) hat den Wert CharT() (ein Null-Terminator)(seit C++11); oder gleichwertig, ein Zeiger auf s[0] kann an Funktionen übergeben werden, die einen Zeiger auf das erste Element von einem Array(bis C++11)einem null-terminierten Array(seit C++11) von CharT erwarten.
std::basic_string erfüllt die Anforderungen von AllocatorAwareContainer (außer dass für die Konstruktion/Destruktion von Elementen keine benutzerdefinierten construct/destroy verwendet werden), SequenceContainer und ContiguousContainer(seit C++17).
Wenn Traits::char_type und Allocator::char_type unterschiedlich von CharT sind, ist das Programm ill-formed.
|
Alle Memberfunktionen von |
(seit C++20) |
Mehrere Typedefs für gängige Zeichentypen werden bereitgestellt
| Definiert in 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> |
Inhalt |
[edit] Template-Parameter
| CharT | - | Zeichentyp |
| Traits | - | Traits-Klasse, die die Operationen auf dem Zeichentyp spezifiziert |
| Allocator | - | Allocator-Typ, der zur Zuweisung des internen Speichers verwendet wird |
[edit] Verschachtelte Typen
| Typ | Definition | ||||
traits_type
|
Traits
| ||||
value_type
|
CharT
| ||||
allocator_type
|
Allocator | ||||
size_type
|
| ||||
difference_type
|
| ||||
Referenz
|
value_type& | ||||
const_reference
|
const value_type& | ||||
Zeiger
|
| ||||
const_pointer
|
| ||||
iterator
|
| ||||
const_iterator
|
| ||||
reverse_iterator
|
std::reverse_iterator<iterator> | ||||
const_reverse_iterator
|
std::reverse_iterator<const_iterator> |
[edit] Datenmember
constexpr size_type npos [static] |
der spezielle Wert size_type(-1), seine genaue Bedeutung hängt vom Kontext ab |
[edit] Memberfunktionen
konstruiert einen basic_string(public member function) | |
| zerstört den String und gibt bei Bedarf den internen Speicher frei (public member function) | |
| weist dem String Werte zu (public member function) | |
| weist Zeichen einem String zu (public member function) | |
| (C++23) |
weist einen Zeichenbereich einem String zu (public member function) |
| gibt den zugehörigen Allocator zurück (public member function) | |
Elementzugriff | |
| greift mit Grenzwertprüfung auf das angegebene Zeichen zu (public member function) | |
| greift auf das angegebene Zeichen zu (public member function) | |
| (DR*) |
greift auf das erste Zeichen zu (public member function) |
| (DR*) |
greift auf das letzte Zeichen zu (public member function) |
| gibt einen Zeiger auf das erste Zeichen eines Strings zurück (public member function) | |
| gibt ein nicht modifizierbares Standard-C-Zeichenarray des Strings zurück (public member function) | |
| (C++17) |
gibt eine nicht modifizierbare basic_string_view auf den gesamten String zurück(public member function) |
Iteratoren | |
| (C++11) |
gibt einen Iterator zum Anfang zurück (public member function) |
| (C++11) |
gibt einen Iterator zum Ende zurück (public member function) |
| (C++11) |
gibt einen Reverse-Iterator zum Anfang zurück (public member function) |
| (C++11) |
gibt einen Reverse-Iterator zum Ende zurück (public member function) |
Kapazität | |
| prüft, ob der String leer ist (public member function) | |
| gibt die Anzahl der Zeichen zurück (public member function) | |
| gibt die maximale Anzahl von Zeichen zurück (public member function) | |
| reserviert Speicher (public member function) | |
| gibt die Anzahl der Zeichen zurück, die im aktuell zugewiesenen Speicher gehalten werden können (public member function) | |
| (DR*) |
reduziert den Speicherverbrauch durch Freigabe von ungenutztem Speicher (public member function) |
Modifizierer | |
| leert den Inhalt (public member function) | |
| fügt Zeichen ein (public member function) | |
| (C++23) |
fügt einen Zeichenbereich ein (public member function) |
| entfernt Zeichen (public member function) | |
| hängt ein Zeichen am Ende an (public member function) | |
| (DR*) |
entfernt das letzte Zeichen (public member function) |
| hängt Zeichen am Ende an (public member function) | |
| (C++23) |
hängt einen Zeichenbereich am Ende an (public member function) |
| hängt Zeichen am Ende an (public member function) | |
| ersetzt einen angegebenen Teil eines Strings (public member function) | |
| (C++23) |
ersetzt einen angegebenen Teil eines Strings durch einen Zeichenbereich (public member function) |
| kopiert Zeichen (public member function) | |
| ändert die Anzahl der gespeicherten Zeichen (public member function) | |
| (C++23) |
ändert die Anzahl der gespeicherten Zeichen und überschreibt möglicherweise unbestimmte Inhalte durch eine benutzerdefinierte Operation (public member function) |
| tauscht die Inhalte (public member function) | |
Suche | |
| sucht das erste Vorkommen der gegebenen Teilzeichenkette (public member function) | |
| sucht das letzte Vorkommen einer Teilzeichenkette (public member function) | |
| findet das erste Vorkommen von Zeichen (public member function) | |
| findet das erste Fehlen von Zeichen (public member function) | |
| findet das letzte Vorkommen von Zeichen (public member function) | |
| findet das letzte Fehlen von Zeichen (public member function) | |
Operationen | |
| vergleicht zwei Strings (public member function) | |
| (C++20) |
prüft, ob der String mit dem gegebenen Präfix beginnt (public member function) |
| (C++20) |
prüft, ob der String mit dem gegebenen Suffix endet (public member function) |
| (C++23) |
prüft, ob der String die gegebene Teilzeichenkette oder das gegebene Zeichen enthält (public member function) |
| gibt eine Teilzeichenkette zurück (public member function) | |
[edit] Nicht-Member-Funktionen
| verknüpft zwei Strings, einen String und ein char, oder einen String und string_view (function template) | |
| (entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(C++20) |
vergleicht zwei Strings lexikographisch (function template) |
| spezialisiert den Algorithmus std::swap (function template) | |
| entfernt alle Elemente, die bestimmte Kriterien erfüllen (function template) | |
Ein-/Ausgabe | |
| führt Stream-Ein- und -Ausgabe auf Strings durch (function template) | |
| liest Daten aus einem E/A-Stream in einen String (function template) | |
Numerische Konvertierungen | |
| (C++11)(C++11)(C++11) |
konvertiert einen String in eine vorzeichenbehaftete Ganzzahl (function) |
| (C++11)(C++11) |
konvertiert einen String in eine vorzeichenlose Ganzzahl (function) |
| (C++11)(C++11)(C++11) |
konvertiert einen String in einen Gleitkommawert (function) |
| (C++11) |
konvertiert einen ganzzahligen oder Gleitkommawert in einen string(function) |
| (C++11) |
konvertiert einen ganzzahligen oder Gleitkommawert in einen wstring(function) |
[edit] Literale
| Definiert im Inline-Namespace
std::literals::string_literals | |
| (C++14) |
konvertiert ein Zeichenkettenliteral in basic_string(function) |
[edit] Hilfsklassen
| (C++11) |
Hash-Unterstützung für Strings (Klassentemplate-Spezialisierung) |
[edit] Deduction guides (seit C++17)
[edit] Iterator-Invalidierung
Referenzen, Zeiger und Iteratoren, die sich auf die Elemente eines basic_string beziehen, können durch jede Standardbibliotheksfunktion, die eine Referenz auf einen nicht-const basic_string als Argument nimmt, wie z. B. std::getline, std::swap oder operator>>, und durch Aufruf nicht-const Memberfunktionen ungültig gemacht werden, mit Ausnahme von operator[], at, data, front, back, begin, rbegin, end und rend.
[edit] Anmerkungen
Obwohl bis C++23 gefordert wurde, dass für die Konstruktion oder Zerstörung von Elementen von std::basic_string benutzerdefinierte construct oder destroy verwendet werden, verwendeten alle Implementierungen nur den Standardmechanismus. Die Anforderung wurde durch P1072R10 korrigiert, um die bestehende Praxis anzupassen.
| 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 zur Konstruktion, Einfügung und Ersetzung, die einen Container-kompatiblen Bereich akzeptieren |
[bearbeiten] Beispiel
#include <iostream> #include <string> int main() { using namespace std::literals; // Creating a string from const char* std::string str1 = "hello"; // Creating a string using string literal auto str2 = "world"s; // Concatenating strings std::string str3 = str1 + " " + str2; // Print out the result std::cout << str3 << '\n'; std::string::size_type pos = str3.find(" "); str1 = str3.substr(pos + 1); // the part after the space str2 = str3.substr(0, pos); // the part till the space std::cout << str1 << ' ' << str2 << '\n'; // Accessing an element using subscript operator[] std::cout << str1[0] << '\n'; str1[0] = 'W'; std::cout << str1 << '\n'; }
Ausgabe
hello world world hello w World
[bearbeiten] 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 | Die Kontiguität des Speichers für Elemente von basic_stringwurde versehentlich durch LWG259 nicht gefordert |
wieder gefordert |
| LWG 2861 | C++98 | value_type war Traits::char_type |
geändert zu CharT |
| LWG 2994 (P1148R0) |
C++98 | Das Verhalten ist undefiniert, wenn entweder Traits::char_type[1]und Allocator::char_type von CharT verschieden sind |
Das Programm ist ill-formed in diesem Fall |
[bearbeiten] Siehe auch
| (C++17) |
schreibgeschützte String-Ansicht (class template) |
[bearbeiten] Externe Links
| C++ Stringbehandlung |