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. |
Devuelve la longitud efectiva de la cadena. |
|
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种情况:
当resize中参数的值<size()函数返回的值,我们可以理解成删除数据,即把数据删成只剩下resize中的参数值。
当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类对象的修改操作
函数名称 |
功能说明 |
尾插字符 |
|
追加一个字符串 |
|
operator+=(重点) |
追加字符串 |
c_str(重点) |
返回c格式字符串 |
从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置 |
|
从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置 |
|
在str中从pos位置开始,截取n个字符,然后将其返回 |
代码演示:
使用find函数时如果找得到字符就返回该字符所在位置(位置下标),找不到时就返回npos,npos的值为-1。substr函数是截取字符串。
string类非成员函数
函数名称 |
功能 |
尽量少用,传值返回,导致深拷贝效率低 |
|
operator>>(重点) |
输入运算重载符号 |
operator<<(重点) |
输出运算重载符号 |
getline(重点) |
获取一行字符串 |
大小比较 |
|
字符串交换 |
getline的用法:
relational operators的用法:
其余接口非常简单咱就不一一多说了。
到现在位置我们string类学的就差不多了,我讲解的是平常用的比较多以及比较重要的函数接口,如有什么错误请大家给我指正出来我一定虚心请教~~感谢老铁支持!!