Namespaces
Variants

std:: basic_string

From cppreference.net
std::basic_string
Definido en el encabezado <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) (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 std::basic_string generalmente no pueden ser constexpr , porque cualquier almacenamiento asignado dinámicamente debe liberarse en la misma evaluación de la expresión constante.

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

Allocator::pointer

(hasta C++11)

std:: allocator_traits < Allocator > :: pointer

(desde C++11)
const_pointer

Allocator::const_pointer

(hasta C++11)

std:: allocator_traits < Allocator > :: const_pointer

(desde C++11)
iterator

LegacyRandomAccessIterator y LegacyContiguousIterator a value_type

(hasta C++20)

LegacyRandomAccessIterator , contiguous_iterator , y ConstexprIterator a value_type

(desde C++20)
const_iterator

LegacyRandomAccessIterator y LegacyContiguousIterator a const value_type

(hasta C++20)

LegacyRandomAccessIterator , contiguous_iterator , y ConstexprIterator a const value_type

(desde C++20)
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)
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)
devuelve un basic_string_view no modificable de toda la cadena
(función miembro pública)
Iteradores
devuelve un iterador al inicio
(función miembro pública)
(C++11)
devuelve un iterador al final
(función miembro pública)
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)
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)
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)
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)
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)
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)
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
convierte un literal de arreglo de caracteres a basic_string
(función)

Clases auxiliares

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
  1. El caso de Traits::char_type está corregido en P1148R0 .

Véase también

vista de cadena de solo lectura
(plantilla de clase)

Enlaces externos

Manejo de cadenas en C++