码迷,mamicode.com
首页 > 其他好文 > 详细

for_each与伪函数

时间:2017-01-20 19:31:17      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:tor   cpp   简化   each   while   cti   input   private   ret   

1.for_each就是封装好的循环遍历函数。共三个参数,前两个为迭代器,最后一个参数为函数指针或者伪函数。

函数原型如下(effective stl):

template< typename InputIterator, typename Function >
Function for_each( InputIterator beg, InputIterator end, Function f ) {
    while ( beg != end )
        f( *beg++ );
}


2.伪函数就是重载了()运算符的struct或class.

struct DelPointer
{
    template<typename T>void operator()(T* ptr) 
    {
        delete ptr;
    }
}

3.for_each实例。

#include <vector>
#include <iostream>

struct State
{
    State( int state ) : m_state( state ){}
    ~State() { std::cout << "~State(), m_state=" << m_state << std::endl; }

    void setState( int state ){ m_state = state; }
    int getState() const{ return m_state; }

    void print() const { std::cout << "State::print: " << m_state << std::endl; }

private:
    int m_state;
};

int main()
{
    std::vector<State*> vect;
    ......................................
    ......................................
    std::for_each( vect.begin(), vect.end(), DeletePointer() );
    vect.clear();

    system( "pause" );
    return 0;
}

 

4.如果觉得每次都要定义一个伪函数比较麻烦,STL也给我们提供了模板函数,用于简化这种情况。

#include <vector>
#include <iostream>

struct State
{
    State( int state ) : m_state( state ){}
    ~State() { std::cout << "~State(), m_state=" << m_state << std::endl; }

    void setState( int state ){ m_state = state; }
    int getState() const{ return m_state; }

    void print() const { std::cout << "State::print: " << m_state << std::endl; }

private:
    int m_state;
};

int main()
{
    std::vector<State*> vect;

    vect.push_back( new State(0) );
    vect.push_back( new State(1) );
    vect.push_back( new State(2) );
    vect.push_back( new State(3) );

    std::for_each( vect.begin(), vect.end(), std::mem_fun( &State::print ) );
    
    system( "pause" );
    return 0;
}

 

for_each与伪函数

标签:tor   cpp   简化   each   while   cti   input   private   ret   

原文地址:http://www.cnblogs.com/wsswlyy/p/6323468.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!