首页 > 代码库 > for_each与伪函数
for_each与伪函数
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与伪函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。