string - C++ Reference (cplusplus.com)
引入:
ASCII码表------>Unicode
其中又进行了分类:
(UTF--8兼容ASCII码表)
等等等等
(不但迭代和更新)
例:
目录
find_first_of与find_first_not_of与find_last_of
目录
find_first_of与find_first_not_of与find_last_of
正文开始!!!!!
string类常用的接口
常见构造
例:
(起初有的是length,后来为了和其他保持一致才用了size)
例:
(15没有包括/0,实际上是16个字符)
容量操作
例:
更好的选择:
尾插用append,其他插入(包括头插可以用)
reserve和resize:
(reverse减少扩容,提高效率)
缺省值填的是‘0’
如果想改缺省值,
总结一下reserve和resize吧!
扩容如果有足够的空间可以原地扩容,但缩容不能原地缩(一般为开辟新的空间)
迭代器:(左闭右开)
(end为最后一个的下一个)
三种访问string的方式:(访问string里的每一个)
1.下标+方括号
2.迭代器
3.范围for(范围for的底层是迭代器)
(两种迭代器:)
这里介绍一种反向遍历的方法。
例:
同时注意:
如果函数调用的对象为const,返回的一定得是const迭代器,要不然就会报错。
例:(普通迭代器和const迭代器的区别)
insert与erase
insert:
例:
但是并不推荐使用insert,为什么呢?(联系数据结构,都存在挪动数据,效率低下)
erase:
replace与find:
find:
例:
结果为:
如果想把空格都替换掉呢?加个循环不就好了!
把程序改进一下:
(效率提升了一点!)
但其实:(以空间换时间)
一步开到位会省下很多扩容!!!!!(reserve(不用resize,因为不用在扩容的同时初始化))
swap:
那这里的swap与库里有的函数swap有什么区别呢?
例:
哪一个更高效呢?
当然是string里的swap啦!相当于是改变了指针指向的位置。
库里的swap要用到深拷贝
c_str:
例:
c_str是会按照字符串去打印的(是以\0为终止的)
substr:
例:
find_first_of与find_first_not_of与find_last_of
找到括号里字符串中的任何一个字母都会停下来。
例:
(注意这个只能用于字符的替换修改,对于字符串来说,还得用find)
find_first_of与find_last_of都是找任一个,只不过一个是顺着找的,一个是倒着找的。
getline
例:getline(cin,str);
reverse
注意凡是迭代器都是左闭右开!
string的大小
VS:28个字节
(g++:32位下是4个字节,64位下是8个字节)
不“写”就不进行深拷贝,“写”的时候还是有深拷贝的。
(不写就赌赢了。)