std:: basic_string
|
Défini dans l'en-tête
<string>
|
||
|
template
<
class
CharT,
|
(1) | |
|
namespace
pmr
{
template
<
|
(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,
|
(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
|
|
||||
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 > |
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) |
|
|
(C++23)
|
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) |
|
|
(C++17)
|
retourne une
basic_string_view
non modifiable de la chaîne entière
(fonction membre publique) |
Itérateurs |
|
|
(C++11)
|
retourne un itérateur vers le début
(fonction membre publique) |
|
(C++11)
|
retourne un itérateur vers la fin
(fonction membre publique) |
|
(C++11)
|
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) |
|
|
(
DR*
)
|
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) |
|
|
(C++23)
|
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) |
|
|
(C++23)
|
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) |
|
|
(C++23)
|
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) |
|
|
(C++23)
|
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) |
|
|
(C++20)
|
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
|
|
|
(C++14)
|
convertit un littéral de tableau de caractères en
basic_string
(fonction) |
Classes d'assistance
|
(C++11)
|
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 |
Voir aussi
|
(C++17)
|
vue de chaîne en lecture seule
(modèle de classe) |
Liens externes
| Gestion des chaînes de caractères en C++ |