Namensräume
Varianten
Aktionen

std::basic_string

Von cppreference.com
< cpp‎ | string
 
 
 
std::basic_string
 
Definiert in 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, 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 [0s.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 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 dynamisch zugewiesener Speicher im selben konstanten Ausdruck freigegeben werden muss.

(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[edit]
size_type
Allocator::size_type (bis C++11)
std::allocator_traits<Allocator>::size_type (seit C++11)
[Bearbeiten]
difference_type
Allocator::difference_type (bis C++11)
std::allocator_traits<Allocator>::difference_type (seit C++11)
[Bearbeiten]
Referenz value_type&[edit]
const_reference const value_type&[edit]
Zeiger

Allocator::pointer

(bis C++11)

std::allocator_traits<Allocator>::pointer

(seit C++11)
[Bearbeiten]
const_pointer

Allocator::const_pointer

(bis C++11)

std::allocator_traits<Allocator>::const_pointer

(seit C++11)
[Bearbeiten]
iterator

LegacyRandomAccessIterator und LegacyContiguousIterator zu value_type

(bis C++20)

LegacyRandomAccessIterator, contiguous_iterator, und ConstexprIterator zu value_type

(seit C++20)
[Bearbeiten]
const_iterator

LegacyRandomAccessIterator und LegacyContiguousIterator zu const value_type

(bis C++20)

LegacyRandomAccessIterator, contiguous_iterator, und ConstexprIterator zu const value_type

(seit C++20)
[Bearbeiten]
reverse_iterator std::reverse_iterator<iterator>[edit]
const_reverse_iterator std::reverse_iterator<const_iterator>[edit]

[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) [edit]
zerstört den String und gibt bei Bedarf den internen Speicher frei
(public member function) [edit]
weist dem String Werte zu
(public member function) [edit]
weist Zeichen einem String zu
(public member function) [edit]
weist einen Zeichenbereich einem String zu
(public member function) [edit]
gibt den zugehörigen Allocator zurück
(public member function) [edit]
Elementzugriff
greift mit Grenzwertprüfung auf das angegebene Zeichen zu
(public member function) [edit]
greift auf das angegebene Zeichen zu
(public member function) [edit]
(DR*)
greift auf das erste Zeichen zu
(public member function) [edit]
(DR*)
greift auf das letzte Zeichen zu
(public member function) [edit]
gibt einen Zeiger auf das erste Zeichen eines Strings zurück
(public member function) [edit]
gibt ein nicht modifizierbares Standard-C-Zeichenarray des Strings zurück
(public member function) [edit]
gibt eine nicht modifizierbare basic_string_view auf den gesamten String zurück
(public member function) [edit]
Iteratoren
gibt einen Iterator zum Anfang zurück
(public member function) [edit]
(C++11)
gibt einen Iterator zum Ende zurück
(public member function) [edit]
gibt einen Reverse-Iterator zum Anfang zurück
(public member function) [edit]
(C++11)
gibt einen Reverse-Iterator zum Ende zurück
(public member function) [edit]
Kapazität
prüft, ob der String leer ist
(public member function) [edit]
gibt die Anzahl der Zeichen zurück
(public member function) [edit]
gibt die maximale Anzahl von Zeichen zurück
(public member function) [edit]
reserviert Speicher
(public member function) [edit]
gibt die Anzahl der Zeichen zurück, die im aktuell zugewiesenen Speicher gehalten werden können
(public member function) [edit]
reduziert den Speicherverbrauch durch Freigabe von ungenutztem Speicher
(public member function) [edit]
Modifizierer
leert den Inhalt
(public member function) [edit]
fügt Zeichen ein
(public member function) [edit]
fügt einen Zeichenbereich ein
(public member function) [edit]
entfernt Zeichen
(public member function) [edit]
hängt ein Zeichen am Ende an
(public member function) [edit]
entfernt das letzte Zeichen
(public member function) [edit]
hängt Zeichen am Ende an
(public member function) [edit]
hängt einen Zeichenbereich am Ende an
(public member function) [edit]
hängt Zeichen am Ende an
(public member function) [edit]
ersetzt einen angegebenen Teil eines Strings
(public member function) [edit]
ersetzt einen angegebenen Teil eines Strings durch einen Zeichenbereich
(public member function) [edit]
kopiert Zeichen
(public member function) [edit]
ändert die Anzahl der gespeicherten Zeichen
(public member function) [edit]
ändert die Anzahl der gespeicherten Zeichen und überschreibt möglicherweise unbestimmte Inhalte durch eine benutzerdefinierte Operation
(public member function) [edit]
tauscht die Inhalte
(public member function) [edit]
Suche
sucht das erste Vorkommen der gegebenen Teilzeichenkette
(public member function) [edit]
sucht das letzte Vorkommen einer Teilzeichenkette
(public member function) [edit]
findet das erste Vorkommen von Zeichen
(public member function) [edit]
findet das erste Fehlen von Zeichen
(public member function) [edit]
findet das letzte Vorkommen von Zeichen
(public member function) [edit]
findet das letzte Fehlen von Zeichen
(public member function) [edit]
Operationen
vergleicht zwei Strings
(public member function) [edit]
prüft, ob der String mit dem gegebenen Präfix beginnt
(public member function) [edit]
(C++20)
prüft, ob der String mit dem gegebenen Suffix endet
(public member function) [edit]
(C++23)
prüft, ob der String die gegebene Teilzeichenkette oder das gegebene Zeichen enthält
(public member function) [edit]
gibt eine Teilzeichenkette zurück
(public member function) [edit]

[edit] Nicht-Member-Funktionen

verknüpft zwei Strings, einen String und ein char, oder einen String und string_view
(function template) [edit]
(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) [edit]
spezialisiert den Algorithmus std::swap
(function template) [edit]
entfernt alle Elemente, die bestimmte Kriterien erfüllen
(function template) [edit]
Ein-/Ausgabe
führt Stream-Ein- und -Ausgabe auf Strings durch
(function template) [edit]
liest Daten aus einem E/A-Stream in einen String
(function template) [edit]
Numerische Konvertierungen
(C++11)(C++11)(C++11)
konvertiert einen String in eine vorzeichenbehaftete Ganzzahl
(function) [edit]
(C++11)(C++11)
konvertiert einen String in eine vorzeichenlose Ganzzahl
(function) [edit]
(C++11)(C++11)(C++11)
konvertiert einen String in einen Gleitkommawert
(function) [edit]
(C++11)
konvertiert einen ganzzahligen oder Gleitkommawert in einen string
(function) [edit]
konvertiert einen ganzzahligen oder Gleitkommawert in einen wstring
(function) [edit]

[edit] Literale

Definiert im Inline-Namespace std::literals::string_literals
konvertiert ein Zeichenkettenliteral in basic_string
(function) [edit]

[edit] Hilfsklassen

Hash-Unterstützung für Strings
(Klassentemplate-Spezialisierung) [bearbeiten]

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

[bearbeiten] Siehe auch

schreibgeschützte String-Ansicht
(class template) [bearbeiten]

[bearbeiten] Externe Links

C++ Stringbehandlung