目录
一.简单了解string类
二.string的接口与使用
2.1string类对象的常见构造
2.2. string类对象的容量操作
2.3 string类对象的访问及遍历操作
2.4 string类对象的修改操作
一.简单了解string类
1. 字符串是表示字符序列的类
2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。
3. string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信息,请参阅basic_string)。
4. string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits和allocator作为basic_string的默认参数(根于更多的模板信息请参考basic_string)。
5. 注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。
总结:
1. string是表示字符串的字符串类
2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
3. string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator>
string;
4. 不能操作多字节或者变长字符的序列。
在使用string类时,必须包含#include头文件以及using namespace std;
二.string的接口与使用
2.1string类对象的常见构造
#include <iostream>
#include <string>
using namespace std;
void test1() {
string s1;//构造空的string对象
string s2("hello");//构造字符串hello
string s3(s2);//拷贝构造s3
string s4(5, 's');//s4含有五个字符s
}
int main() {
test1();
return 0;
}
接下来我们看一下监视窗口:
2.2. string类对象的容量操作
我们还是用下述代码来验证:
#include <iostream>
#include <string>
using namespace std;
void test1() {
string s1;//构造空的string对象
string s2("hello");//构造字符串hello
string s3(s2);//拷贝构造s3
string s4(5, 's');//s4含有五个字符s
s4.reserve(30);//扩容到30
s3.resize(4);//将有效字符重置为4--->hell
s3.resize(10, 's');//将有效字符重置为10,多出来的用s填充
s3.clear();//最后清空s3有效字符串
cout << s2.size() << endl;
cout << s2.length() << endl;
cout << s2.capacity() << endl;
cout << s2.empty() << endl;
}
int main() {
test1();
return 0;
}
2.21.s4.reserve(30);//扩容到30:首先s4为啥扩容到31而不是30(之后再说)
2.s3.resize(4);//将有效字符重置为4
s3.resize(10, 's');//将有效字符重置为10,多出用's'补充
若传入一个参数size,若size>原有的有效长度,则补充第二个参数传递的内容,
若size<原有的有效长度则截取;
3.s3.clear();//最后清空s3有效字符串
4.最后我们看s2的各种属性:
!!最后输出0表示字符串非空...
注意:注意:
1. size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一
致,一般情况下基本都是用size()。
2. clear()只是将string中有效字符清空,不改变底层空间大小。
3. resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出的元素空间。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。
4. reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于
string的底层空间总大小时,reserver不会改变容量大小。
2.3 string类对象的访问及遍历操作
我们拿以下😔代码验证:
#include <iostream>
#include <string>
using namespace std;
void test1() {
string s1;//构造空的string对象
string s2("hello");//构造字符串hello
string s3(s2);//拷贝构造s3
string s4(5, 's');//s4含有五个字符s
//1.下标遍历
for (int i = 0; i < s2.size(); i++) {
cout << s2[i];
}
cout << endl;
//2.迭代器begin()/end()遍历
string::iterator it = s2.begin();
while (it != s2.end()) {
cout << *it;
it++;
}
cout << endl;
//3.迭代器rbegin()/rend()遍历
string::reverse_iterator rit = s2.rbegin();
while (rit != s2.rend()) {
cout << *rit;
rit++;
}
cout << endl;
//4.范围for
for (auto e : s2) {
cout << e;;
}
cout << endl;
}
int main() {
test1();
return 0;
}
输出:
2.4 string类对象的修改操作
这里就不做过多演示~
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)