Namespaces
Variants

std:: basic_string

From cppreference.net
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 vom Typ TrivialType und StandardLayoutType handelt. Die Klasse ist weder vom Zeichentyp noch von der Art der Operationen auf diesen Typ abhängig. Die Definitionen der Operationen werden über den Traits -Template-Parameter bereitgestellt - eine Spezialisierung von std::char_traits oder eine kompatible Eigenschaftenklasse.

Die Elemente eines basic_string sind zusammenhängend gespeichert, das heißt, 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 Nullterminator) (seit C++11) ; oder äquivalent dazu kann ein Zeiger auf s [ 0 ] an Funktionen übergeben werden, die einen Zeiger auf das erste Element eines Arrays (bis C++11) nullterminierten Arrays (seit C++11) von CharT erwarten.

std::basic_string erfüllt die Anforderungen von AllocatorAwareContainer (außer dass angepasste construct / destroy nicht für die Konstruktion/Destruktion von Elementen verwendet werden), SequenceContainer und ContiguousContainer (seit C++17) .

Falls einer von Traits::char_type und Allocator::value_type sich von CharT unterscheidet, ist das Programm fehlerhaft.

Alle Memberfunktionen von std::basic_string sind constexpr : Es ist möglich, std::basic_string -Objekte in der Auswertung eines konstanten Ausdrucks zu erstellen und zu verwenden.

Allerdings können std::basic_string -Objekte im Allgemeinen nicht constexpr sein, da jeder dynamisch allokierte Speicher in derselben Auswertung des konstanten Ausdrucks freigegeben werden muss.

(seit C++20)

Es werden mehrere Typdefinitionen für gängige Zeichentypen 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 >

Inhaltsverzeichnis

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
Allocator::size_type (bis C++11)
std:: allocator_traits < Allocator > :: size_type (seit C++11)
difference_type
Allocator :: difference_type (bis C++11)
std:: allocator_traits < Allocator > :: difference_type (seit C++11)
reference value_type &
const_reference const value_type &
pointer

Allocator::pointer

(bis C++11)

std:: allocator_traits < Allocator > :: pointer

(seit C++11)
const_pointer

Allocator::const_pointer

(bis C++11)

std:: allocator_traits < Allocator > :: const_pointer

(seit C++11)
iterator

LegacyRandomAccessIterator und LegacyContiguousIterator zu value_type

(bis C++20)

LegacyRandomAccessIterator , contiguous_iterator , und ConstexprIterator zu value_type

(seit C++20)
const_iterator

LegacyRandomAccessIterator und LegacyContiguousIterator zu const value_type

(bis C++20)

LegacyRandomAccessIterator , contiguous_iterator , und ConstexprIterator zu const value_type

(seit C++20)
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)
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)
gibt eine nicht modifizierbare basic_string_view der gesamten Zeichenkette zurück
(öffentliche Elementfunktion)
Iteratoren
gibt einen Iterator zum Anfang zurück
(öffentliche Elementfunktion)
(C++11)
gibt einen Iterator zum Ende zurück
(öffentliche Elementfunktion)
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)
Reduziert die Speichernutzung durch Freigabe ungenutzten Speichers
(öffentliche Elementfunktion)
Modifikatoren
löscht den Inhalt
(öffentliche Elementfunktion)
fügt Zeichen ein
(öffentliche Elementfunktion)
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)
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)
ersetzt einen bestimmten Teilbereich einer Zeichenkette mit einem Zeichenbereich
(öffentliche Elementfunktion)
kopiert Zeichen
(öffentliche Elementfunktion)
ändert die Anzahl der gespeicherten Zeichen
(öffentliche Elementfunktion)
ä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
vergleicht zwei Zeichenketten
(öffentliche Elementfunktion)
prüft, ob der String mit dem angegebenen Präfix beginnt
(öffentliche Elementfunktion)
(C++20)
prüft, ob der String mit dem angegebenen Suffix endet
(öffentliche Elementfunktion)
(C++23)
prüft, ob der String die gegebene Teilzeichenkette oder das Zeichen enthält
(öffentliche Elementfunktion)
gibt einen Teilstring 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
konvertiert ein Zeichenarray-Literal zu basic_string
(Funktion)

Hilfsklassen

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
  1. Der Traits::char_type Fall ist behoben in P1148R0 .

Siehe auch

schreibgeschützte String-Ansicht
(Klassen-Template)

Externe Links

C++-Stringbehandlung