Comprenda rápidamente el uso de cadenas en STL

Una ventaja obvia de C++ en comparación con el lenguaje C es STL. Hay muchas estructuras de datos listas para usar en C++ y podemos usarlas para resolver problemas de manera muy conveniente. A continuación presentamos un nuevo miembro: string

¿Cuál es la clase de cuerda?

En primer lugar, podemos echar un vistazo a la documentación sobre la clase string: Introducción a la documentación de la clase string

Resumen: 1. En pocas palabras, es una clase que representa cadenas y realiza las operaciones correspondientes en cadenas llamando a diferentes interfaces encapsuladas.

2. String es en realidad un alias de la clase de plantilla basic_string en la capa inferior, typedef basic_string<char, char_traits, allocator>

3. Cuando use la clase de cadena, debe incluir el archivo de encabezado #include y usar el espacio de nombres std.

Interfaz de llamada común de clase de cadena

    • Construcciones comunes de objetos de clase de cadena.

( construir ) construcción de funciones

Función descriptiva

cadena() (énfasis)

cadena (const char* s) (énfasis)

Construido con una cadena en formato c.

cadena (tamaño_t n, carácter c)

El objeto de clase de cadena contiene n caracteres c

string(const string&s) (énfasis)

constructor de copias

Visualización de uso:

2. Operación de capacidad de objetos de cadena.

nombre de la función

Función descriptiva

tamaño (énfasis)

Devuelve la longitud efectiva de la cadena.

longitud

Devuelve la longitud efectiva de la cadena.

capacidad

Devuelve el tamaño total del espacio.

vacío (énfasis)

Determine si la cadena está vacía, devuelva verdadero si lo está, devuelva falso si no lo está

clear(重点)

清空字符串

reserse(重点)

为字符串预留空间

resize(重点)

将字符的个数改为n个,多出的空间用字符填充

q:这时就会有人困惑了,size和length的功能一样,为什么要设计两个不同的函数呢??

答:在我们后面会学习不同类型的数据结构如vector、list、map等等,显然有的不适合用length来封装容器中数据的有效个数,使用size是为了保证接口的一致性。

用法展示:


注:clear函数只清除有效字符,不改变容量的大小。

注:reserve函数的功能是提前预留空间,但空间的大小并不能根据你给的值而定,是编译器根据你给的空间的小而预留出合适的空间大小。另外,reserve函数只扩容不缩容!!



通过图我们可以分为以下3种情况:

  1. 当resize中参数的值<size()函数返回的值,我们可以理解成删除数据,即把数据删成只剩下resize中的参数值。

  1. 当resize中参数的值>=size()函数返回的值&& 当resize中参数的值<=capacity()函数返回的值,我们可以理解成只是改变size的大小不改变capacity的大小,如果resize()中的参数指定了某个字符,那么原数据中末尾会补齐这个特定的字符直到字符串达到size的大小,不写则默认不补。

3.当resize中的参数值>capacity()函数返回的值时,我们就可以理解成扩容,类似于reserve函数。

string类对象的访问及遍历操作

函数名称

功能说明

operator[](重点)

返回pos位置的字符(支持随机访问)

begin+end

begin获取第一个字符迭代器,end获取最后一个字符的下一个位置的迭代器

rbegin+rend

反向迭代器

范围for

c++11支持

下标的随机访问:

迭代器遍历:

string类对象的修改操作

函数名称

功能说明

push_back

尾插字符

append

追加一个字符串

operator+=(重点)

追加字符串

c_str(重点)

返回c格式字符串

find+npos(重点)

从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置

rfind

从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置

substr

在str中从pos位置开始,截取n个字符,然后将其返回

代码演示:


使用find函数时如果找得到字符就返回该字符所在位置(位置下标),找不到时就返回npos,npos的值为-1。substr函数是截取字符串。

string类非成员函数

函数名称

功能

operator+

尽量少用,传值返回,导致深拷贝效率低

operator>>(重点)

输入运算重载符号

operator<<(重点)

输出运算重载符号

getline(重点)

获取一行字符串

relational operators(重点)

大小比较

swap

字符串交换

getline的用法:

relational operators的用法:

其余接口非常简单咱就不一一多说了。

到现在位置我们string类学的就差不多了,我讲解的是平常用的比较多以及比较重要的函数接口,如有什么错误请大家给我指正出来我一定虚心请教~~感谢老铁支持!!

Supongo que te gusta

Origin blog.csdn.net/m0_69005269/article/details/128548729
Recomendado
Clasificación