STL的常用遍历算法(20221128)

STL的常用算法

概述:

算法主要是由头文件 组成。

是所有STL头文件中最大的一个,涉及比较、交换、查找、遍历等等;

定义了一些模板类,用于声明函数对象;

体积很小,只包括几个在序列上面进行简单数学运算的模板函数。

一、遍历算法

for_each //遍历容器

transform //搬运容器到另一个容器中

1、for_each遍历

for_each(iterator beg,iterator end,_func);

beg:开始迭代器

end;结束迭代器

_func:函数或函数对象

//普通函数

void printVector(int val)

{

    cout << val << " ";

}



//仿函数

class Print {

public:

    void operator()(int val)

    {

        cout << val << " ";

    }

};

void test01()

{

    //for_each遍历

    vectorV;

    for (int i = 0; i < 10; i++)

    {

        V.push_back(i);

    }

    for_each(V.begin(), V.end(),printVector);//用普通函数遍历  0 1 2 3 4 5 6 7 8 9

    cout << endl;

    for_each(V.begin(), V.end(),Print());//用仿函数遍历 传入一个匿名对象 0 1 2 3 4 5 6 7 8 9

}

STL的常用遍历算法(20221128)_第1张图片

2、transform

搬运容器到另一个容器中。

函数原型:

transform(iterator beg,iterator end, iterator beg1 ,_func);

beg:开始迭代器

end;结束迭代器

beg1:搬运的目标容器的开始迭代器

_func:函数或函数对象

class Transform {

public:

    int operator()(int val)

    {

        return val;

    }

};



class TransformTenTime {

public:

    int operator()(int val)

    {

        return 10*val;

    }

};

void test02()

{

    //transform

    vectorV;

    for (int i = 0; i < 10; i++)

    {

        V.push_back(i);

    }

    vectortarget;

    target.resize(V.size());//目标容器需要提前开辟空间

    transform(V.begin(), V.end(), target.begin(), Transform()); //仿函数搬运 Transform()为匿名对象

    for_each(target.begin(), target.end(), Print()); //0 1 2 3 4 5 6 7 8 9

    cout << endl;

    //若想在搬运中做一些运算,可以自己在仿函数写

    transform(V.begin(), V.end(), target.begin(), TransformTenTime()); //10倍搬运 TransformTenTime()为匿名对象

    for_each(target.begin(), target.end(), Print()); // 0 10 20 30 40 50 60 70 80 90

}

你可能感兴趣的:(c++学习,算法,c++)