CC13.【C++ Cont】初识string类字符串的迭代器

目录

1.迭代器的定义

2.迭代器的作用

3.string类字符串的常用迭代器

4.第3点的两个迭代器的使用

示例代码1:解引用

运行结果

示例代码2

运行结果

示例代码3:用迭代器正序遍历字符串

运行结果

示例代码4:用迭代器逆序遍历字符串 

运行结果

示例代码5:用迭代器修改字符串

运行结果


1.迭代器的定义

迭代器(iterator n.迭代器 iterate v.迭代)是一种对象,它可以用来遍历容器(比如我们现在学习的string,有关string的简单介绍参见C12.【C++ Cont】string类字符串的创建、输入、访问和size函数文章)中的元素

2.迭代器的作用

作用类似于指针或者数组下标,注意:访问迭代器指向的值需要解引用(*)

访问容器使用迭代器,不用关注容器的底层实现,迭代器链接容器和算法

3.string类字符串的常用迭代器

C++中的string提供了多种迭代器,用于遍历和操作字符串中的内容,下面介绍string类字符串的常用迭代器

1.begin():返回指向字符串第一个字符的迭代器,需要一个迭代器的变量来接收

2.end():返回指向字符串最后一个字符的下一个位置的迭代器,注意该位置不属于字符串!!

3.上方两个迭代器返回的类型是string::iterator,因此接收迭代器返回值的变量类型为string::iterator(是正向迭代器类型)

4.string::iterator it是直接创建迭代器,it是针对字符串的迭代器

4.第3点的两个迭代器的使用

示例代码1:解引用

注意:访问迭代器指向的值需要解引用(*)

#include <iostream>
#include <string>
using namespace std;
int main()
{
	string s = "abcde";
	string::iterator it1 = s.begin();
	string::iterator it2 = s.end();
	cout<<*it1<<endl;
	cout<<*it2<<endl;
}

不能直接打印迭代器的值! 即写成cout<<it1<<endl;是错误的! 需要解引用(*)

运行结果

493f23d71f4e477da12e68964d283818.png

注:*it2的打印结果为空,因为end():返回指向字符串最后一个字符的下一个位置(为空)的迭代器

示例代码2

迭代器可以比较大小也可以+或-或整数运算

#include <iostream>
#include <string>
using namespace std;
int main()
{
	string s = "abcde";
	string::iterator it1 = s.begin();
	string::iterator it2 = s.end();
	cout << (it1 < it2) << endl;//结果为真
	cout << (it1 > it2) << endl;//结果为假
	cout << it1 - it2 << endl;
    it1++;//迭代器前进一步
    cout << *it1 <<endl;
    it1--;//迭代器后退一步
    cout << *it1;
	return 0;
}

运行结果

79fc0d9a9faf4a349ef0ab47a92486c5.png

示例代码3:用迭代器正序遍历字符串

即迭代器可以修改

#include <iostream>
#include <string>
using namespace std;
int main()
{
	string s = "abcde";
	for (string::iterator it=s.begin();it<s.end();it++)
	{
		cout<<*it;
	}
	return 0;
}

其他写法:auto关键字(忘了类型直接写auto)

for (auto it=s.begin();it<s.end();it++)
//......

注:与auto关键字有关的内容参见C7.【C++ Cont】范围for的使用和auto关键字文章

运行结果

33e30b5645b64fdcb51cc61d0abf8a1d.png

示例代码4:用迭代器逆序遍历字符串 

#include <iostream>
#include <string>
using namespace std;
int main()
{
	string s = "abcde";
	for (auto it=s.end()-1;it>=s.begin();it--)
	{
		cout<<*it;
	}
	return 0;
}

运行结果

ece4825e13f24473af913a649d581e71.png

示例代码5:用迭代器修改字符串

类似指针,对迭代器解引用修改字符串

#include <iostream>
#include <string>
using namespace std;
int main()
{
	string s = "abcde";
	auto it=s.end()-1;
	*it='x';//将字符串末尾的e改成x
	cout<<s;
	return 0;
}

运行结果

c24696fbff114e57b0e3b1b2189bcdce.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangcoder

赠人玫瑰手有余香,感谢支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值