常用遍历算法

SLT的算法主要放在三个头文件里面:

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

常用遍历算法

  • 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()
{
    vectorv;
    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()
{
    vectorv;
    for (int i = 0; i < 10; i++)
    {
        v.push_back(i + 1);
    }
    vector 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,所有数据取反等等。本例中没有进行这样的操作,直接原值返回,也就是不做任何运算,原样复制到目标容器中去。

你可能感兴趣的:(常用遍历算法)