目录
3)string(const string& str,size_t pos,size_t len = npos)
5)string(const char* s,size_t n)
7)string(InputIterator first,InputIterator last)
一、string类的简单介绍
C++中的string是一个表示字符串的类,它提供了丰富的成员函数来操作字符串。里面有一百多个成员函数,在使用时就非常方便,注意:使用时需要包含头文件<string>。
下图为其中一部分截图:
接下来慢慢介绍相关成员函数。
二、string类中成员函数介绍
1.构造函数
在C++98中有7种构造函数,我们接下来逐一介绍。
1)string()
第一个构造函数是一个默认构造函数,它会创建一个空的字符串。
2)string(const string& str)
第二个是拷贝构造函数,用所传入的参数来初始化。
3)string(const string& str,size_t pos,size_t len = npos)
第三个构造函数从str的pos位置开始拷贝,拷贝到len,如果实际字符个数少于len就拷贝到结尾。
需要注意的是pos是下标,下标是从0开始的。
可以看到第三个参数提供了缺省值npos,npos是整型最大值,当我们不写第三个参数时默认就是到npos,而npos是肯定会大于原字符串的长度的,所以会一直拷贝到结尾。
4)string(const char* s)
这个构造函数参数是一个字符串,然后会用该字符串初始化,如上边那个例子str1。
5)string(const char* s,size_t n)
这个构造函数也是用传入的字符串来初始化,与上面不同的是,只取该字符串中的n个字符。
6)string(size_t n,char c)
该构造函数是用n个字符c来初始化。
7)string(InputIterator first,InputIterator last)
这个构造函数是根据给定的迭代器范围创建一个字符串对象。
平时用的比较多的还是1)2)4)这三个。
2.遍历方式
1)下标+[ ]
⭐size()函数计算的是有效字符串的长度,即不包括\0。
⭐使用[ ]遍历时,实际上会对下标进行检查,当越界时会报错。
2)迭代器
string::begin()和string::end()分别返回指向字符串第一个元素和最后一个元素后一个位置(即\0)的迭代器。
iterator是可读可写的,而const_iterator是只可读不可写的,迭代器所指向的数据不能修改,但本身是可以修改的,类似指针const int* p。
3) 范围for
范围for底层角度也是迭代器,在for循环里e++不会改变原来的字符串,因为是拷贝过来的,将*it拷贝给e(在上述代码中)。但如果改成auto& e:str就会改变。
3.iterator
1)begin()和end()
在上边已经说过了,begin()和end()分别返回指向容器开头和结尾的迭代器。
需要注意的是,返回类型有两种,一种是iterator,一种是const_iterator,const_iterator只可读,不能改变迭代器所指向的数据。
2)rbegin()和rend()
rbegin()返回一个指向容器最后一个元素的反向迭代器,rend()返回一个指向容器第一个元素前一个位置的反向迭代器。
这里画图区别一下1)和2):
begin()和end()是从左往右走,而rbegin()和rend()是从右往左走,当对迭代器++时是往左走。
rbegin()和rend()的意义就是可以反向遍历字符串。
3)cbegin()和cend
cbegin()和cend()与begin()和end()就非常相似了,只是返回的是常量迭代器。
4)crbegin()和crend()
crbegin()和crend()就非常相似了,只是返回的是常量反向迭代器。