zoukankan      html  css  js  c++  java
  • 仿函数

    template<typename T >
    struct Compare{
        bool operator()(const T & ele1,const T &ele2){
            return ele1 < ele2;
        }
    };

    1 . 仿函数可用于排序准则

    例:

    // Settest.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <set>
    #include <iostream>
    #include <algorithm>
    #include <functional>
    
    using namespace std;
    
    template<typename T >
    struct Compare{
        bool operator()(const T & ele1,const T &ele2){
            return ele1 < ele2;
        }
    };
    
    int main(int argc, char* argv[])
    {
        typedef multiset< int ,Compare<int> > Set;   //容器插入时的比较准则
        Set iset;
        iset.insert(2);
        iset.insert(1);
        iset.insert(3);
        iset.insert(3);
    
        ostream_iterator<int> out(cout," ");
        copy(iset.begin(),iset.end(),out);
        return 0;
    }

     2 . 拥有内部状态的仿函数

    template<typename T >
    struct IntSequence{
        IntSequence(int i):m_i(i){}
        int operator()(){
            return m_i++; 
        }
        int m_i;
    };
    
    
    int main(int argc, char* argv[])
    {
    
        list<int> ilist;
        generate_n(back_inserter(ilist),5,IntSequence<int>(1));
        ostream_iterator<int> out(cout," ");
        copy(ilist.begin(),ilist.end(),out);
        return 0;
    }

      这个有如下几个地方注意

    1.generate_n

    template<class OutputIterator,class Size,class Generator>
    OutputIterator generate_n(OutputIterator first,Size n,Generator gen){
        for( ; n> 0; --n,++first){
            *first = gen();
        }
        return first;
    }

     在内部每次调用了 Generator重载的()函数(每次调用作用于生成的gen对象,仿函数保存状态), 也调用了 OutputIterator重载的=函数,

    2 OutputIterator重载的=函数

    insert iterators包括back_insert_iterator,front_insert_iterator和insert_iterator。主要观念是,每个insertiterators内部都维护有一个容器;容器有自己的迭代器,当客户端对insert iterators做赋值操作时,就在insert iterators中转为对该容器的迭代器做插入操作,其他的迭代器功能则被关闭。

    在insert iterators的operator=操作转化为调用底层容器的push_back()或push_front()或insert()操作函数

      小结:generate或generate_n在对还未定下size的容器进行生成时,使用list.back_iterator.

  • 相关阅读:
    输入框只能输入正数且保留小数后2位数字,正则
    vscode安装ESlint配置
    kubreretes && docker 模块
    python3安装sqlite3库
    dokcerfile 制作Msql镜像
    前端模板
    Python SMTP发送邮件
    k8s-api
    openpyxl
    k8s mysql主从
  • 原文地址:https://www.cnblogs.com/xiumukediao/p/4659186.html
Copyright © 2011-2022 走看看