std:: basic_string
|
Definido en el encabezado
<string>
|
||
|
template
<
class
CharT,
|
(1) | |
|
namespace
pmr
{
template
<
|
(2) | (desde C++17) |
La plantilla de clase
basic_string
almacena y manipula secuencias de objetos
similares a caracteres
, que son objetos no-arreglo de
TrivialType
y
StandardLayoutType
. La clase no depende ni del tipo de carácter ni de la naturaleza de las operaciones sobre ese tipo. Las definiciones de las operaciones se proporcionan mediante el parámetro de plantilla
Traits
- una especialización de
std::char_traits
o una clase de rasgos compatible.
Los elementos de un
basic_string
se almacenan de forma contigua, es decir, para un
basic_string
s
,
&
*
(
s.
begin
(
)
+
n
)
==
&
*
s.
begin
(
)
+
n
para cualquier
n
en
[
0
,
s.
size
(
)
)
, y
*
(
s.
begin
(
)
+
s.
size
(
)
)
tiene el valor
CharT
(
)
(un terminador nulo)
(desde C++11)
; o, equivalentemente, un puntero a
s
[
0
]
puede pasarse a funciones que esperan un puntero al primer elemento de
un array
(hasta C++11)
un array terminado en nulo
(desde C++11)
de
CharT
.
std::basic_string
satisface los requisitos de
AllocatorAwareContainer
(excepto que no se utilizan
construct
/
destroy
personalizados para la construcción/destrucción de elementos),
SequenceContainer
y
ContiguousContainer
(desde C++17)
.
Si alguno de
Traits::char_type
y
Allocator::value_type
es diferente de
CharT
, el programa está mal formado.
Todas las funciones miembro de
std::basic_string
son
constexpr
: es posible crear y utilizar objetos
std::basic_string
en la evaluación de una expresión constante.
Sin embargo, los objetos
|
(since C++20) |
Se proporcionan varios typedefs para tipos de caracteres comunes:
|
Definido en el encabezado
<string>
|
|
| Tipo | Definición |
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 > |
Contenidos |
Parámetros de plantilla
| CharT | - | tipo de carácter |
| Traits | - | clase de rasgos que especifica las operaciones sobre el tipo de carácter |
| Allocator | - | Allocator tipo utilizado para asignar almacenamiento interno |
Tipos anidados
| Tipo | Definición | ||||
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 > |
Miembros de datos
constexpr
size_type
npos
[static]
|
el valor especial size_type ( - 1 ) , su significado exacto depende del contexto |
Funciones miembro
construye un
basic_string
(función miembro pública) |
|
|
destruye la cadena, desasignando el almacenamiento interno si se utilizó
(función miembro pública) |
|
|
asigna valores a la cadena
(función miembro pública) |
|
|
asignar caracteres a una cadena
(función miembro pública) |
|
|
(C++23)
|
asignar un rango de caracteres a una cadena
(función miembro pública) |
|
devuelve el asignador asociado
(función miembro pública) |
|
Acceso a elementos |
|
|
accede al carácter especificado con verificación de límites
(función miembro pública) |
|
|
accede al carácter especificado
(función miembro pública) |
|
|
(
DR*
)
|
accede al primer carácter
(función miembro pública) |
|
(
DR*
)
|
accede al último carácter
(función miembro pública) |
|
devuelve un puntero al primer carácter de una cadena
(función miembro pública) |
|
|
devuelve una versión no modificable del arreglo de caracteres estándar de C de la cadena
(función miembro pública) |
|
|
(C++17)
|
devuelve un
basic_string_view
no modificable de toda la cadena
(función miembro pública) |
Iteradores |
|
|
(C++11)
|
devuelve un iterador al inicio
(función miembro pública) |
|
(C++11)
|
devuelve un iterador al final
(función miembro pública) |
|
(C++11)
|
devuelve un iterador inverso al principio
(función miembro pública) |
|
(C++11)
|
devuelve un iterador inverso al final
(función miembro pública) |
Capacidad |
|
|
comprueba si la cadena está vacía
(función miembro pública) |
|
|
devuelve el número de caracteres
(función miembro pública) |
|
|
devuelve el número máximo de caracteres
(función miembro pública) |
|
|
reserva almacenamiento
(función miembro pública) |
|
|
devuelve el número de caracteres que pueden almacenarse en el almacenamiento actualmente asignado
(función miembro pública) |
|
|
(
DR*
)
|
reduce el uso de memoria liberando memoria no utilizada
(función miembro pública) |
Modificadores |
|
|
borra el contenido
(función miembro pública) |
|
|
inserta caracteres
(función miembro pública) |
|
|
(C++23)
|
inserta un rango de caracteres
(función miembro pública) |
|
elimina caracteres
(función miembro pública) |
|
|
añade un carácter al final
(función miembro pública) |
|
|
(
DR*
)
|
elimina el último carácter
(función miembro pública) |
|
añade caracteres al final
(función miembro pública) |
|
|
(C++23)
|
agrega un rango de caracteres al final
(función miembro pública) |
|
añade caracteres al final
(función miembro pública) |
|
|
reemplaza la porción especificada de una cadena
(función miembro pública) |
|
|
(C++23)
|
reemplaza una porción específica de una cadena con un rango de caracteres
(función miembro pública) |
|
copia caracteres
(función miembro pública) |
|
|
cambia el número de caracteres almacenados
(función miembro pública) |
|
|
(C++23)
|
cambia el número de caracteres almacenados y posiblemente sobrescribe contenidos indeterminados mediante una operación proporcionada por el usuario
(función miembro pública) |
|
intercambia los contenidos
(función miembro pública) |
|
Búsqueda |
|
|
encuentra la primera ocurrencia de la subcadena dada
(función miembro pública) |
|
|
encontrar la última ocurrencia de una subcadena
(función miembro pública) |
|
|
encontrar primera ocurrencia de caracteres
(función miembro pública) |
|
|
encontrar primera ausencia de caracteres
(función miembro pública) |
|
|
encontrar última ocurrencia de caracteres
(función miembro pública) |
|
|
encontrar última ausencia de caracteres
(función miembro pública) |
|
Operaciones |
|
|
compara dos cadenas
(función miembro pública) |
|
|
(C++20)
|
comprueba si la cadena comienza con el prefijo dado
(función miembro pública) |
|
(C++20)
|
comprueba si la cadena termina con el sufijo dado
(función miembro pública) |
|
(C++23)
|
comprueba si la cadena contiene la subcadena o carácter dado
(función miembro pública) |
|
devuelve una subcadena
(función miembro pública) |
|
Funciones no miembro
|
concatena dos cadenas, una cadena y un
char
, o una cadena y
string_view
(plantilla de función) |
|
|
(eliminado en C++20)
(eliminado en C++20)
(eliminado en C++20)
(eliminado en C++20)
(eliminado en C++20)
(C++20)
|
compara lexicográficamente dos cadenas
(plantilla de función) |
|
especializa el algoritmo
std::swap
(plantilla de función) |
|
|
elimina todos los elementos que cumplen criterios específicos
(plantilla de función) |
|
Entrada/Salida |
|
|
realiza entrada y salida de flujo en cadenas
(plantilla de función) |
|
|
lee datos de un flujo de E/S hacia una cadena
(plantilla de función) |
|
Conversiones numéricas |
|
|
(C++11)
(C++11)
(C++11)
|
convierte una cadena a un entero con signo
(función) |
|
(C++11)
(C++11)
|
convierte una cadena a un entero sin signo
(función) |
|
(C++11)
(C++11)
(C++11)
|
convierte una cadena a un valor de punto flotante
(función) |
|
(C++11)
|
convierte un valor entero o de punto flotante a
string
(función) |
|
(C++11)
|
convierte un valor entero o de punto flotante a
wstring
(función) |
Literales
|
Definido en el espacio de nombres en línea
std::literals::string_literals
|
|
|
(C++14)
|
convierte un literal de arreglo de caracteres a
basic_string
(función) |
Clases auxiliares
|
(C++11)
|
soporte de hash para cadenas
(especialización de plantilla de clase) |
Guías de deducción (desde C++17)
Invalidación de iteradores
Las referencias, punteros e iteradores que hacen referencia a los elementos de un
basic_string
pueden ser invalidados por cualquier función de la biblioteca estándar que tome una referencia a un
basic_string
no constante como argumento, como
std::getline
,
std::swap
, o
operator>>
, y al llamar a funciones miembro no constantes, excepto
operator[]
,
at
,
data
,
front
,
back
,
begin
,
rbegin
,
end
, y
rend
.
Notas
Aunque se requería que se utilizaran
construct
o
destroy
personalizados al construir o destruir elementos de
std::basic_string
hasta C++23, todas las implementaciones solo utilizaron el mecanismo predeterminado. El requisito se corrigió mediante
P1072R10
para ajustarse a la práctica existente.
| Macro de prueba de características | Valor | Estándar | Característica |
|---|---|---|---|
__cpp_lib_string_udls
|
201304L
|
(C++14) | Literales definidos por el usuario para tipos de cadena |
__cpp_lib_starts_ends_with
|
201711L
|
(C++20) |
starts_with
,
ends_with
|
__cpp_lib_constexpr_string
|
201907L
|
(C++20) |
Constexpr para
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) | Funciones miembro para construcción, inserción y reemplazo que aceptan rango compatible con contenedor |
Ejemplo
#include <iostream> #include <string> int main() { using namespace std::literals; // Creando un string desde const char* std::string str1 = "hello"; // Creando un string usando literal de cadena auto str2 = "world"s; // Concatenando strings std::string str3 = str1 + " " + str2; // Imprimir el resultado std::cout << str3 << '\n'; std::string::size_type pos = str3.find(" "); str1 = str3.substr(pos + 1); // la parte después del espacio str2 = str3.substr(0, pos); // la parte hasta el espacio std::cout << str1 << ' ' << str2 << '\n'; // Accediendo a un elemento usando el operador subíndice[] std::cout << str1[0] << '\n'; str1[0] = 'W'; std::cout << str1 << '\n'; }
Salida:
hello world world hello w World
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Se aplica a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 530 | C++98 |
la contigüidad del almacenamiento para elementos de
basic_string
se eliminó accidentalmente por LWG259 |
se requiere nuevamente |
| LWG 2861 | C++98 |
value_type
era
Traits::char_type
|
cambiado a
CharT
|
|
LWG 2994
( P1148R0 ) |
C++98 |
el comportamiento es indefinido si alguno de
Traits::char_type
[1]
y
Allocator::char_type
es diferente de
CharT
|
el programa es
incorrecto en este caso |
Véase también
|
(C++17)
|
vista de cadena de solo lectura
(plantilla de clase) |
Enlaces externos
| Manejo de cadenas en C++ |