【C++】string类(介绍、常用接口)

简介: 【C++】string类(介绍、常用接口)

在使用string类时,必须包含#include头文件以及using namespace std;


string类的常用接口说明

string类对象的常见构造




第一行是构造一个空字符串。第二行是构造输入的字符串。第三行是拷贝构造。第四行是从下标为5开始的三个字符构造,当第三个参数大于末尾下标时,或者当第三个参数不写时,就会把剩下全部的字符用来构造。





上图中,s3是用n个字符c构造。s5是从字符串中,用前3个构造。 s0=s3是赋值。


string字符串的遍历(迭代器)

下标加[](operator[])




在c++中,字符串后面是有'\0'的。但是size是不会计算'\0'的。如上图。







下标加[]的方式,不仅可以读取,还可以修改。


我们还发现,他有两种重载形式(this指针不同):



如果是const修饰的,就不能修改,只能读。


迭代器iterator(begin、end)



迭代器iterator是一个类型,是定义在string类里面的,需要指定类域才能用。end()是最后一个有效字符的下一个位置,即‘\0’。begin()是起始位置。他模拟指针的行为,但他不是指针,因此他也可读可写。


反向迭代器(rbegin、rend)








当我们的对象是const对象,我们要用对应的const的iterator。end也是如此。用const修饰后,就不能修改了,只能读,不能写。如果是反向的,就是    string::const_reverse_iterator


范围for



范围for遍历,底层其实也是迭代器。写起来会比较简洁。


容量操作

size、length、max_size、capacity




size和length是一样的,一般使用size。 max_size就是最大的长度,实际上没什么意义。capacity就是容量。



capacity实际不包含'\0'占用的空间的,虽然写着15,但实际是16。31实际是32。刚开始是两倍的扩,后面就是1.5倍的扩。但是扩容机制是不确定的。



clear就是清除数据,但是清不清空间是不确定的。


shrink_to_fit

如果想清理空间,就要缩容:




缩容会把空间减少到size的大小。清空时,最小的大小是16。


reserve

我们插入数据,空间不够,会自动扩容。如果想要手动扩容,就要用reserve。




如果我们知道大概需要多少空间,可以请求空间。这样就不需要频繁的扩容,频繁扩容会降低效率。不过我们申请100个,它不一定就给100个,可能会给更大的空间。如果我们给的比当前的capacity小,他就不会生效。只有比当前capacity大,才会扩容。


resize







resize是改变size的大小。如果改变后的大小比当前小,就删除。如果大于当前size,小于capacity,就插入。如果大于capacity就扩容+插入。resize有两个版本,如果第二个参数不写,就默认插入'\0',如果写了,就插入该字符。


at





at() 和 operator[] 都是根据下标获取任意位置元素的,在debug模式下两者都会去做边界检查。


当发生越界行为时,at 是抛异常,operator[] 内部的assert会触发


目录
相关文章
|
1天前
|
存储 Java 测试技术
滚雪球学Java(47):String类教程:如何在Java中使用字符串操作
【6月更文挑战第1天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
11 2
滚雪球学Java(47):String类教程:如何在Java中使用字符串操作
|
2天前
|
C++
C++中类的接口与实现分离的技术性探讨
C++中类的接口与实现分离的技术性探讨
8 1
|
2天前
|
算法 C++
C++中的友元类(Friend Classes)技术详解
C++中的友元类(Friend Classes)技术详解
5 0
|
2天前
|
设计模式 程序员 编译器
C++中的纯虚类(Pure Virtual Classes)
C++中的纯虚类(Pure Virtual Classes)
6 1
|
2天前
|
C++
C++ 类的访问修饰符:深入解析
C++ 类的访问修饰符:深入解析
6 1
|
2天前
|
C++
C++ 类的初始化列表与构造函数初始化的技术性探讨
C++ 类的初始化列表与构造函数初始化的技术性探讨
5 0
|
2天前
|
存储 Serverless 数据安全/隐私保护
C++ 类的成员函数和数据成员的技术性探讨
C++ 类的成员函数和数据成员的技术性探讨
10 0
|
4天前
|
安全 Linux 编译器
从C语言到C++_40(多线程相关)C++线程接口+线程安全问题加锁(shared_ptr+STL+单例)(下)
从C语言到C++_40(多线程相关)C++线程接口+线程安全问题加锁(shared_ptr+STL+单例)
13 0
|
4天前
|
安全 C语言 C++
从C语言到C++_40(多线程相关)C++线程接口+线程安全问题加锁(shared_ptr+STL+单例)(中)
从C语言到C++_40(多线程相关)C++线程接口+线程安全问题加锁(shared_ptr+STL+单例)
10 0
|
17天前
|
Java 索引
String字符串常用函数以及示例 JAVA基础
String字符串常用函数以及示例 JAVA基础