- 我最近开了几个专栏,诚信互三!
====> |||《算法专栏》::刷题教程来自网站《代码随想录》。|||
====> |||《C++专栏》::记录我学习C++的经历,看完你一定会有收获。|||
====> |||《Linux专栏》::记录我学习Linux的经历,看完你一定会有收获。|||
====> |||《C#专栏》::记录我复习C#的经历,深度理解,查漏补缺,不定期更新。|||
C++ STL之string初始
- STL介绍
- string类
- 数据成员
- 成员函数
- 构造函数
- 容量和大小
- 访问
- 修改
- 迭代器初识
STL介绍
STL(标准模板库),自C++11后引进,该库中含有各种常见数据结构,算法…模板。
它们的存在使得我们编写C++程序的效率更高,STL并非是C++祖师爷开发,大多数都由一些个人,公司等,其中有各种版本,我们主要以P.J.版和SGL版为例。
string类
std::string ------ typedef basic_string< char > string;
string类就是一个字符串和各种函数包装成了一个类,string类的出现其实比STL早,随后被归于了STL中。
数据成员
string中较为重要的数据成员有
char str[]
int capacity
int size
成员函数
构造函数
string有多个构造函数。
其中(1),(2),(4)需要较为常用,需要记住,(3)函数的作用如图。
如图所示,pos是从某个字符开始,而len则是长度了,该构造函数的作用就是从下标为pos的字符开始的后len个字符拷贝给一个对象。
len有一个缺省值,npos,该值是一个静态成员变量,static size_t npos = -1,该值是一个很大的值,是为了不论字符长度多大,只要缺省len,则将从pos开始的字符全都拷贝。
容量和大小
其中最重要的是,size,resize,capacity,reserve
size和length的作用都一样,计算串的大小,不包含’\0’,存在2个作用相同的函数的原因就是string的出现比STL早,但最后被归于STL,而语言又只能向前更新。
capacity函数用来计算当前字符数组的容量,要注意的是,容量capacity和大小size是不同的,size及该串有多少个有效字符,而capacity则代表该串有多少个空间,所以size < capacity
resize,reserve,resize用来重新设置串的大小,reserve用来设置串的容量。
此处reserve后,容量比30大的原因是因为vs下对string扩容会有内存对齐,在Linux下使用该函数就不会存在该问题。
resize的使用会影响到capacity。
resize函数的用处不在于此
若resize后大小大于原大小,则在其余空间处部字符c。
访问
访问主要了解operator[],at
这2个函数除了在越界访问时进行的警告不同,其他几乎一样,在C语言中,检查越界是抽查式,而C++的访问函数解决了这个问题,只要越界,必会报错。
修改
关于修改的函数主要了解operator+=,insert,erase
operator+=可以在一个string类型的后面追加字符串/字符,这是一个十分常用的函数。
insert 可以在某个位置插入某些字符/串
erase可以对串的某个范围/使用迭代器迭代,进行删除。
迭代器初识
迭代器是各种可迭代类型中的一个成员,迭代器可以帮助我们完成对此种类型的遍历。
声明一个迭代器(以string为例)
普通迭代器和const迭代器的区别是普通迭代器可以修改迭代器所指向的内容,而const迭代器无法修改其所指向的内容。
与迭代器有关的函数如图。
这些函数其实就2中类型,(begin end) (rbegin rend),c开头的成员函数其实就是返回const迭代器,这些函数可以在某些时候增加代码可读性,如图。
begin,end begin函数返回可迭代类型最开始的起始位置,是闭区间,end返回终止位置,是开区间[begin,end)。
rbegin,rend则是逆置的意思,及rbegin = end,rend = begin,依旧是左闭右开[rbegin,rend)。