目录
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;是错误的! 需要解引用(*)
运行结果
注:*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;
}
运行结果
示例代码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关键字文章
运行结果
示例代码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;
}
运行结果
示例代码5:用迭代器修改字符串
类似指针,对迭代器解引用修改字符串
#include <iostream>
#include <string>
using namespace std;
int main()
{string s = "abcde";auto it=s.end()-1;*it='x';//将字符串末尾的e改成xcout<<s;return 0;
}
运行结果