STL的常用遍历算法(20221128)

STL的常用算法

概述:

算法主要是由头文件<algorithm> <functional> <numeric> 组成。

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

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

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

一、遍历算法

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遍历

    vector<int>V;

    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

}

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

    vector<int>V;

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

    {

        V.push_back(i);

    }

    vector<int>target;

    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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值