C++——STL字符串04

这下来介绍一下迭代器

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;


}

猜你喜欢

转载自blog.csdn.net/qq_40794602/article/details/80212901