C++提高编程 5 STL -常用算法(遍历算法)

5  STL-常用算法

  概述:

    算法主要由头文件<algorithm>、<functional>、<numeric>组成;

  <algorithm>是所有STL头文件中最大的,范围涉及到比较、交换、查找、遍历、复制、修改等;

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

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

 

5.1 常用遍历算法

  for_each  //遍历容器

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

 

5.1.1  for_each

  功能描述:实现遍历容器

  函数原型:for_each(iterator  beg, iterator  end,  _func);

  //beg开始迭代器  end结束迭代器  _func函数或者函数对象 

#include<iostream>
using namespace std;
#include<vector>   
#include<algorithm>

//常用遍历容器  for_each

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

//仿函数
class print2
{
public:
    void operator()(int val)
    {
        cout << val << " ";
    }
    
};
void test1()
{
    vector<int>v;
    for (int i = 0; i < 10; i++)
    {
        v.push_back(i);
    }

    for_each(v.begin(), v.end(), print1);        //使用for_each要加头文件 #include<algorithm>
    cout << endl;                                

    for_each(v.begin(), v.end(), print2());
    cout << endl;
}

int main()
{
    test1();

    system("pause");
    return 0;
}

 

 

5.1.2  transform

功能描述:搬运容器到另一个容器中

函数原型:transform(iterator beg1,  iterator end1, iterator beg2,  _func);

     //beg1(end1)源容器开始(结束)迭代器

     //beg2  目标容器开始迭代器

     //_func函数或者函数对象

#include<iostream>
using namespace std;
#include<vector>   
#include<algorithm>

//常用遍历容器  transform

//仿函数
class Transform
{
public:
    int operator()(int v)
    {
        return v + 100;
    }

};

class print1
{
public:
    void operator()(int val)
    {
        cout << val << " ";
    }

};

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

    vector<int>vTarget;                //目标容器
    vTarget.resize(v.size());        //目标容器需要提前开辟空间

    transform(v.begin(), v.end(), vTarget.begin(), Transform());

    for_each(vTarget.begin(), vTarget.end(), print1());
    cout << endl;
}

int main()
{
    test1();

    system("pause");
    return 0;
}

 

posted @ 2022-03-03 12:21  大白不会敲代码  阅读(106)  评论(0)    收藏  举报