这下来介绍一下迭代器
1.迭代器的基本操作
#include<iostream>
#include<string>//注意不是包含(strng.h),带了.h的C的标准库
using namespace std;
int main()
{
string str("dfkhfk");
string::iterator ite;
ite=str.begin();//用于专门返回迭代器的首地址
//const char *a=str.c_str();和这样的操作类似,其实迭代器就是指针,但是他后面会与算法结合起来使用,对于常规的用char*就可以了
for(int i=0;i<str.size();i++)
{
cout<<*ite<<" ";
ite++;
}
cout<<endl;
//还可以通过下标访问,但是指针要重新指向开头
ite=str.begin();
for(int i=0;i<str.size();i++)
{
cout<<ite[i]<<" ";
}
//介绍一下end()的用法
cout<<endl;
for(;ite!=str.end();ite++)
{
cout<<*ite<<" ";
}
//end函数返回一个指向最后一个元素的后面一个的指针
return 0;
}
remember:当指向的string类型扩容的时候,其实是为这个对象申请了另外一块更大的空间,也就是原来迭代器执行的地址就会失效
2.使用迭代器进行输出
#include<iostream>
#include<string>//注意不是包含(strng.h),带了.h的C的标准库
using namespace std;
int main()
{
string str("dfkhfk");
string::iterator ite;
ite=str.begin();//用于专门返回迭代器的首地址
//const char *a=str.c_str();和这样的操作类似,其实迭代器就是指针,但是他后面会与算法结合起来使用,对于常规的用char*就可以了
for(int i=0;i<str.size();i++)
{
cout<<*ite<<" ";
ite++;
}
cout<<endl;
//还可以通过下标访问,但是指针要重新指向开头
ite=str.begin();
for(int i=0;i<str.size();i++)
{
cout<<ite[i]<<" ";
}
//介绍一下end()的用法
cout<<endl;
for(;ite!=str.end();ite++)
{
cout<<*ite<<" ";
}
//end函数返回一个指向最后一个元素的后面一个的指针
return 0;
}
3.插入
#include<iostream>
#include<string>//注意不是包含(strng.h),带了.h的C的标准库
using namespace std;
int main()
{
string str("abc");
str.insert(str.begin()+1,5,'x');//指定插入几个字符
cout<<str<<endl;
string str1("asdfghjkl");
str.insert(str.begin()+1,str1.begin(),str1.end());//插入 一段字符串
cout<<str<<endl;
return 0;
}
4.补充一点关于string类型的迭代器和算法之间的用法
#include<iostream>
#include<string>
#include<algorithm>
#include<functional>
using namespace std;
void fun(char ch)//这个函数的参数只能是一个char类型
{
cout<<ch<<" ";
}
int main()
{
string str("jdhfskhjkdshfk");
for_each(str.begin(),str.end(),fun);
//这个算法的第一个参数是开头,第二个参数是末尾,第三个参数是要进行什么操作
//注意第三个参数,只要写出这个函数名就可以了
string str1("edbac");
sort(str1.begin(),str1.end());//两个参数的排序,默认从小到大的排序
cout<<endl<<str1<<endl;
string str2("edbac");
sort(str2.begin(),str2.end(),greater<char>());//两个参数的排序,默认从小到大的排序
//这个后面加上的是一个反函数,我也不太懂,反正就是可以让他反着排序,要加上相应的头文件
cout<<endl<<str2<<endl;
return 0;
}