1、STL算法--find_if()

(1)、代码如下:

#include
#include
#include
#include
using namespace std;

template
class IsDiv{
    public:
        IsDiv(const Type &divisor){
            this->divisor = divisor;
        }   

        bool operator()(Type &t){
            return t%divisor == 0;
        }   
    protected:
    private:
        Type divisor;
};

int main(void){
    vector v2; 

    for(int i = 10; i < 33; i++){
        v2.push_back(i);
    }   
    int a = 4;
    IsDiv myDiv(a);

    //find_if(v2.begin(), v2.end(), myDiv);
    vector::iterator it;
    it =find_if(v2.begin(), v2.end(), IsDiv(a) );
    if(it == v2.end()){
        cout<<"容器中没有值是4的元素"< 
  

(2)、运行结果:


2、STL算法--plus的使用

(1)、代码如下:

#include
#include
#include
#include
using namespace std;

//plus 预定义好的函数对象,能实现不同数据 + 算法;
//实现了数据类型和算法的分离======》通过函数对象技术实现的;
//
//思考,怎么知道plus是2个参数------>多看看源码;
void main21(){
    plus intAdd;
    int x = 10;
    int y = 20;

    int z = intAdd(x, y);
    cout<<"z:"< stringAdd;

    string s1 = "aaa";
    string s2 = "bbb";
    string s3 = stringAdd(s1, s2);
    cout<<"s3:"< v1;
    v1.push_back("bbb");
    v1.push_back("aaa");
    v1.push_back("ccc");
    v1.push_back("zzz");
    v1.push_back("ccc");
    v1.push_back("ccc");

    sort(v1.begin(), v1.end(), greater()); //降序排列;
    vector::iterator it;
    for(it = v1.begin(); it != v1.end(); it++){
        cout<<*it<有2个参数,left参数来自容器,right参数来自sc,
    //bind2nd就是函数适配器:把预定义函数对象和第二个参数进行绑定;`
    int num = count_if(v1.begin(), v1.end(), bind2nd(equal_to(), sc));
    cout<<"num:"< 
  

(2)、运行结果:

find_if(),plus,for_each()的用法_第1张图片


3、STL算法--for_each()

(1)、代码如下:

#include
#include
#include
#include
using namespace std;

void printV(vector &v){
    vector::iterator it;

    for(it = v.begin(); it != v.end(); it++){
        cout<<*it<<" ";
    }
    cout< v1;
    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);

    printV(v1);

    //第三个参数是:函数对象/回掉函数
    //for_each(v1.begin(), v1.end(), showElem);  //利用的是回调函数 
    for_each(v1.begin(), v1.end(), MyShow()); //利用的是函数对象(这个类中重载了())
    //函数的返回值是函数对象
    cout< 
  

(2)、运行结果:


4、for_each()和transform()的区别

(1)、代码如下:

#include
#include
#include
#include
using namespace std;

void showElem(int &n){
    cout< v1; 
    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);
    
    vector v2 = v1; 

    for_each(v1.begin(), v1.end(), showElem);
    transform(v2.begin(), v2.end(), v2.begin(), showElem2);//transform对回调函数的要求;返回值必须有
    cout< 
  

运行结果:

wKioL1g3DZCD80NBAAAwKWb_6I4503.png-wh_50