常用遍历算法

SLT的算法主要放在三个头文件里面:<algorithm>、<functional>和<numeric>

  • <algorithm>是所有STL头文件里面最大的一个,范围涉及到比较、交换、查找、遍历、赋值,复制、修改等等。
  • <numeric>的体积较小,包含几个在序列上面进行简单的数学运算的模板函数。
  • <functional> 定义了一些用于声明函数对象的类模板。

常用遍历算法

  • for_each //遍历容器
  • transform //搬运到另一个容器

for_each

for_each(iterator bagin,iterator end,_func);
_func表示函数,或者函数对象


//普通函数输出
void print(int val)
{
    cout << val << " ";
}

//仿函数输出
class Print
{
public:
    void operator()(int val)
    {
        cout << val << " ";
    }
};

void test01()
{
    vector<int>v;
    for (int i = 0; i < 10; i++)
    {
        v.push_back(i + 1);
    }

    cout << "普通函数输出:" << endl;
    for_each(v.begin(), v.end(), print);  //最后一个参数是一个函数名
    cout << "仿函数输出:" << endl;
    cout << endl;
    for_each(v.begin(), v.end(), Print());  //最后一个参数是函数对象,这里写了一个匿名对象
}

transform

transform(iterator begin1,iterator end1, iterator begin2,_func);
begin1 、end1---原容器的起始迭代器、结束迭代器
begin2 --- 目标容器的起始迭代器
_func 函数或者函数对象

void print(int val)
{
    cout << val << " ";
}


class Transform
{
public:
    int operator()(int val)
    {
        return val;  
    }
};

void test01()
{
    vector<int>v;
    for (int i = 0; i < 10; i++)
    {
        v.push_back(i + 1);
    }
    vector<int> vTarget;
    vTarget.resize(v.size());  //需要重新指定大小
    transform(v.begin(), v.end(), vTarget.begin(), Transform());
    for_each(v.begin(), v.end(), print);  //1 2 3 4 5 6 7 8 9 10
}

transform算法里面的最后一个参数是用来在转运的时候进行一些运算的,比如所有数据都+100,所有数据取反等等。本例中没有进行这样的操作,直接原值返回,也就是不做任何运算,原样复制到目标容器中去。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 10.1 概述 #include //大部分算法定义 #include <numeric> //数值泛型算法 ...
    龙遁流阅读 3,669评论 0 1
  • 算法部分主要由头文件 ,<numeric>和<functional>组成。 是所有STL头文件中最大的一个,其中...
    wjundong阅读 1,248评论 0 1
  • 0.前言 最近在做算法移植的时候,发现自己对c++的知识忘得很多,于是就计划重新捡起来。纸上得来终觉浅,绝知此事要...
    c枫_撸码的日子阅读 3,987评论 0 3
  • 1.for_each 用法:for_each(容器起始地址,容器结束地址,要执行的方法)include i...
    数据小冰阅读 2,806评论 0 0
  • Week7 Notes 容器Containers Stack 也是一个线性容器,是一种先进后出FILO的数据结构,...
    古来征战几人回阅读 2,635评论 0 0