Namespaces
Variants

std:: basic_string

From cppreference.net
std::basic_string
Défini dans l'en-tête <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) (depuis C++17)

Le modèle de classe basic_string stocke et manipule des séquences d'objets de type caractère, qui sont des objets non-tableaux de caractère -like, conformes aux exigences TrivialType et StandardLayoutType . La classe ne dépend ni du type de caractère ni de la nature des opérations sur ce type. Les définitions des opérations sont fournies via le paramètre de modèle Traits - une spécialisation de std::char_traits ou une classe de traits compatible.

Les éléments d'un basic_string sont stockés de manière contiguë, c'est-à-dire que pour un basic_string s , & * ( s. begin ( ) + n ) == & * s. begin ( ) + n pour tout n dans [ 0 , s. size ( ) ) , et * ( s. begin ( ) + s. size ( ) ) a pour valeur CharT ( ) (un terminateur nul) (depuis C++11) ; ou, de manière équivalente, un pointeur vers s [ 0 ] peut être passé aux fonctions qui attendent un pointeur vers le premier élément d' un tableau (jusqu'à C++11) un tableau terminé par un caractère nul (depuis C++11) de CharT .

std::basic_string satisfait aux exigences de AllocatorAwareContainer (sauf que les fonctions personnalisées construct / destroy ne sont pas utilisées pour la construction/destruction des éléments), SequenceContainer et ContiguousContainer (depuis C++17) .

Si l'un des types Traits::char_type et Allocator::value_type est différent de CharT , le programme est mal formé.

Toutes les fonctions membres de std::basic_string sont constexpr : il est possible de créer et d'utiliser des objets std::basic_string lors de l'évaluation d'une expression constante.

Cependant, std::basic_string ne peuvent généralement pas être constexpr , car tout stockage alloué dynamiquement doit être libéré lors de la même évaluation d'expression constante.

(since C++20)

Plusieurs typedefs pour les types de caractères courants sont fournis :

Défini dans l'en-tête <string>
Type Définition
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 >

Table des matières

Paramètres du modèle

CharT - type de caractère
Traits - classe de traits spécifiant les opérations sur le type de caractère
Allocator - Allocator type utilisé pour allouer le stockage interne

Types imbriqués

Type Définition
traits_type Traits
value_type CharT
allocator_type Allocator
size_type
Allocator::size_type (jusqu'en C++11)
std:: allocator_traits < Allocator > :: size_type (depuis C++11)
difference_type
Allocator :: difference_type (jusqu'en C++11)
std:: allocator_traits < Allocator > :: difference_type (depuis C++11)
reference value_type &
const_reference const value_type &
pointer

Allocator::pointer

(jusqu'en C++11)

std:: allocator_traits < Allocator > :: pointer

(depuis C++11)
const_pointer

Allocator::const_pointer

(jusqu'en C++11)

std:: allocator_traits < Allocator > :: const_pointer

(depuis C++11)
iterator

LegacyRandomAccessIterator et LegacyContiguousIterator vers value_type

(jusqu'en C++20)

LegacyRandomAccessIterator , contiguous_iterator , et ConstexprIterator vers value_type

(depuis C++20)
const_iterator

LegacyRandomAccessIterator et LegacyContiguousIterator vers const value_type

(jusqu'en C++20)

LegacyRandomAccessIterator , contiguous_iterator , et ConstexprIterator vers const value_type

(depuis C++20)
reverse_iterator std:: reverse_iterator < iterator >
const_reverse_iterator std:: reverse_iterator < const_iterator >

Membres de données

constexpr size_type npos [static] la valeur spéciale size_type ( - 1 ) , sa signification exacte dépend du contexte

Fonctions membres

construit une basic_string
(fonction membre publique)
détruit la chaîne, désallouant le stockage interne si utilisé
(fonction membre publique)
assigne des valeurs à la chaîne
(fonction membre publique)
assigner des caractères à une chaîne
(fonction membre publique)
assigne une plage de caractères à une chaîne
(fonction membre publique)
retourne l'allocateur associé
(fonction membre publique)
Accès aux éléments
accède au caractère spécifié avec vérification des limites
(fonction membre publique)
accède au caractère spécifié
(fonction membre publique)
( DR* )
accède au premier caractère
(fonction membre publique)
( DR* )
accède au dernier caractère
(fonction membre publique)
retourne un pointeur vers le premier caractère d'une chaîne
(fonction membre publique)
retourne une version non modifiable du tableau de caractères C standard de la chaîne
(fonction membre publique)
retourne une basic_string_view non modifiable de la chaîne entière
(fonction membre publique)
Itérateurs
retourne un itérateur vers le début
(fonction membre publique)
(C++11)
retourne un itérateur vers la fin
(fonction membre publique)
retourne un itérateur inverse vers le début
(fonction membre publique)
(C++11)
retourne un itérateur inverse vers la fin
(fonction membre publique)
Capacité
vérifie si la chaîne est vide
(fonction membre publique)
retourne le nombre de caractères
(fonction membre publique)
retourne le nombre maximum de caractères
(fonction membre publique)
réserve de l'espace de stockage
(fonction membre publique)
retourne le nombre de caractères pouvant être stockés dans l'espace mémoire actuellement alloué
(fonction membre publique)
réduit l'utilisation de la mémoire en libérant la mémoire inutilisée
(fonction membre publique)
Modificateurs
efface le contenu
(fonction membre publique)
insère des caractères
(fonction membre publique)
insère une plage de caractères
(fonction membre publique)
supprime des caractères
(fonction membre publique)
ajoute un caractère à la fin
(fonction membre publique)
( DR* )
supprime le dernier caractère
(fonction membre publique)
ajoute des caractères à la fin
(fonction membre publique)
ajoute une plage de caractères à la fin
(fonction membre publique)
ajoute des caractères à la fin
(fonction membre publique)
remplace la partie spécifiée d'une chaîne
(fonction membre publique)
remplace la partie spécifiée d'une chaîne par une plage de caractères
(fonction membre publique)
copie des caractères
(fonction membre publique)
modifie le nombre de caractères stockés
(fonction membre publique)
modifie le nombre de caractères stockés et éventuellement remplace le contenu indéterminé via une opération fournie par l'utilisateur
(fonction membre publique)
échange le contenu
(fonction membre publique)
Recherche
trouve la première occurrence de la sous-chaîne donnée
(fonction membre publique)
trouver la dernière occurrence d'une sous-chaîne
(fonction membre publique)
trouver la première occurrence de caractères
(fonction membre publique)
trouver la première absence de caractères
(fonction membre publique)
trouver la dernière occurrence de caractères
(fonction membre publique)
trouver la dernière absence de caractères
(fonction membre publique)
Opérations
compare deux chaînes de caractères
(fonction membre publique)
vérifie si la chaîne commence par le préfixe donné
(fonction membre publique)
(C++20)
vérifie si la chaîne se termine par le suffixe donné
(fonction membre publique)
(C++23)
vérifie si la chaîne contient la sous-chaîne ou le caractère donné
(fonction membre publique)
retourne une sous-chaîne
(fonction membre publique)

Fonctions non membres

concatène deux chaînes, une chaîne et un char , ou une chaîne et string_view
(modèle de fonction)
(supprimé en C++20) (supprimé en C++20) (supprimé en C++20) (supprimé en C++20) (supprimé en C++20) (C++20)
compare lexicographiquement deux chaînes
(modèle de fonction)
spécialise l'algorithme std::swap
(modèle de fonction)
efface tous les éléments satisfaisant des critères spécifiques
(modèle de fonction)
Entrée/sortie
effectue l'entrée et la sortie de flux sur les chaînes
(modèle de fonction)
lit les données d'un flux d'E/S dans une chaîne
(modèle de fonction)
Conversions numériques
(C++11) (C++11) (C++11)
convertit une chaîne en entier signé
(fonction)
(C++11) (C++11)
convertit une chaîne en entier non signé
(fonction)
(C++11) (C++11) (C++11)
convertit une chaîne en valeur à virgule flottante
(fonction)
(C++11)
convertit une valeur entière ou à virgule flottante en string
(fonction)
(C++11)
convertit une valeur entière ou à virgule flottante en wstring
(fonction)

Littéraux

Défini dans l'espace de noms en ligne std::literals::string_literals
convertit un littéral de tableau de caractères en basic_string
(fonction)

Classes d'assistance

prise en charge du hachage pour les chaînes de caractères
(spécialisation de modèle de classe)

Guides de déduction (depuis C++17)

Invalidation des itérateurs

Les références, pointeurs et itérateurs faisant référence aux éléments d'un basic_string peuvent être invalidés par toute fonction de la bibliothèque standard prenant une référence à un basic_string non constant comme argument, telles que std::getline , std::swap , ou operator>> , et par l'appel de fonctions membres non constantes, à l'exception de operator[] , at , data , front , back , begin , rbegin , end , et rend .

Notes

Bien qu'il soit requis qu'un construct ou destroy personnalisé soit utilisé lors de la construction ou de la destruction des éléments de std::basic_string jusqu'au C++23, toutes les implémentations n'ont utilisé que le mécanisme par défaut. Cette exigence est corrigée par P1072R10 pour correspondre à la pratique existante.

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_string_udls 201304L (C++14) Littéraux définis par l'utilisateur pour les types chaîne
__cpp_lib_starts_ends_with 201711L (C++20) starts_with , ends_with
__cpp_lib_constexpr_string 201907L (C++20) Constexpr pour 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) Fonctions membres pour la construction, l'insertion et le remplacement qui acceptent une plage compatible avec le conteneur

Exemple

#include <iostream>
#include <string>
int main()
{
    using namespace std::literals;
    // Création d'une chaîne à partir de const char*
    std::string str1 = "hello";
    // Création d'une chaîne en utilisant un littéral de chaîne
    auto str2 = "world"s;
    // Concaténation de chaînes
    std::string str3 = str1 + " " + str2;
    // Affichage du résultat
    std::cout << str3 << '\n';
    std::string::size_type pos = str3.find(" ");
    str1 = str3.substr(pos + 1); // la partie après l'espace
    str2 = str3.substr(0, pos);  // la partie jusqu'à l'espace
    std::cout << str1 << ' ' << str2 << '\n';
    // Accès à un élément en utilisant l'opérateur d'indice []
    std::cout << str1[0] << '\n';
    str1[0] = 'W';
    std::cout << str1 << '\n';
}

Sortie :

hello world
world hello
w
World

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR S'applique à Comportement publié Comportement corrigé
LWG 530 C++98 la contiguïté du stockage pour les éléments de basic_string
a été accidentellement rendue non requise par LWG259
à nouveau requise
LWG 2861 C++98 value_type était Traits::char_type modifié en CharT
LWG 2994
( P1148R0 )
C++98 le comportement est indéfini si l'un des Traits::char_type [1]
et Allocator::char_type est différent de CharT
le programme est
mal formé dans ce cas
  1. Le cas Traits::char_type est corrigé dans P1148R0 .

Voir aussi

vue de chaîne en lecture seule
(modèle de classe)

Liens externes

Gestion des chaînes de caractères en C++