【C++】string的基本使用二

我们接着上一篇的迭代器说起,迭代器不只有正向的,还有反向的,就是我们下边的这两个
在这里插入图片描述
【C++】string的基本使用二_第1张图片
它的迭代器类型也是不同的
rbegin就是末尾,rend就是开头,这样我们想遍历一个string对象的话就可以这样做

int main() {
	string s1("abcdefghijk");
	string::reverse_iterator it = s1.rbegin();
	while (it != s1.rend()) {
		cout << *it << ' ';
		it++;
	}
	cout << endl;
	return 0;
}

当然如果我们遇到const对象就要用const版本的迭代器
在这里插入图片描述
一个类型竟然有这么长,这就让我们想起来之前学的auto关键字,它可以自动去匹配类型
在这里插入图片描述
它们是等价的,确实可以方便不少,但同时也带来了问题,就是我不能通过这一条语句知道这个迭代器是const版本的,我还要去看前边的语句才可以
这时库中确实还有其他版本的迭代器
在这里插入图片描述
前边加个c确实就表明这个迭代器是const版本的了,但我们用到确实也是比较少,我们只需要知道就可以了
下一个是我们string中的capacity
【C++】string的基本使用二_第2张图片
这里的capacity就是给我们的对象分配了多大的空间,分配了这么多空间只要没用完就不需要扩容,下面我们看一下VS2019和g++的扩容机制
【C++】string的基本使用二_第3张图片
我们可以看到这整体上是1.5倍扩容
【C++】string的基本使用二_第4张图片
在g++下是2倍扩容
下一个是reserve
在这里插入图片描述
reserve是保留的意思,就是保留多少空间的意思,这个有较大作用的地方就是知道要用多少空间然后提前开好,就可以省去扩容时间
下一个是resize
【C++】string的基本使用二_第5张图片
这个一听就是改变size,如果让size变大的话,后边会补上’\0’,如果让size变小的话,它是会影响到数据的
访问数据不仅可以用下标加方括号,也可以用at
在这里插入图片描述
它们越界都会报错,但是报错的方式是不一样的
【C++】string的基本使用二_第6张图片
【C++】string的基本使用二_第7张图片
一个是程序强制终止,一个是抛异常
我们想给一个对象中增加内容,可以用下面这几种方式
【C++】string的基本使用二_第8张图片
当然最方便的还是+=
我们下一组是插入和删除
【C++】string的基本使用二_第9张图片
【C++】string的基本使用二_第10张图片
它们有很多的重载,但都是在某个位置插入或删除某个元素
我们如果想在键盘中读入带空格的一行,可以用下面的方法
【C++】string的基本使用二_第11张图片

【C++】string的基本使用二_第12张图片
下面是我们的查找,就是查找某个字符
【C++】string的基本使用二_第13张图片
find就是从头开始找,rfind跟我们之前学的迭代器一样,加r就表示反向,所以是从尾开始寻找,下边的我们直接来看用法
【C++】string的基本使用二_第14张图片
【C++】string的基本使用二_第15张图片
这个就是找到s中与s1中的字母相同的,然后让它变成*
其他函数也就以此类推了
下面一个函数是替换
【C++】string的基本使用二_第16张图片
这个就是将ret位置的一个字符替换成20%
看到这个就想起了以前的一个题,就是将所有空格全转换为20%
【C++】string的基本使用二_第17张图片
当然这么写肯定会超时,因为replace的效率是很低的,还是要先把空格的数量算出来,再从后往前依次转换
下一个是我们的将string这个自定义的类生成的对象转换成字符串并返回字符串的指针
【C++】string的基本使用二_第18张图片
【C++】string的基本使用二_第19张图片
我们获取一个文件中的内容的代码就写好了
下一个是截取字符串的操作
【C++】string的基本使用二_第20张图片
【C++】string的基本使用二_第21张图片
这样就将一个网址分成了三部分

你可能感兴趣的:(c++,开发语言)