仿函数和函数配接器
//
// main.cpp
// function_adaptor
//
// Created by IDM-PKU on 14-9-3.
// Copyright (c) 2014年 PKU. All rights reserved.
//
#include <iostream>
#include <set>
#include <deque>
#include <algorithm>
#include "print.hpp"
using namespace std;
int main(int argc, const char * argv[])
{
set<int,greater<int> > coll1;
deque<int> coll2;
for (int i=1; i<=9; ++i) {
coll1.insert(i);
}
PRINT_ELEMENTS(coll1,"initialized: ");
transform(coll1.begin(), coll1.end(),back_inserter(coll2),bind2nd(multiplies<int>(), 10));
PRINT_ELEMENTS(coll2);
replace_if(coll2.begin(), coll2.end(), bind2nd(equal_to<int>(), 70), 42);
PRINT_ELEMENTS(coll2,"replace: ");
coll2.erase(remove_if(coll2.begin(), coll2.end(), bind2nd(less<int>(), 50)), coll2.end());
PRINT_ELEMENTS(coll2,"removed: ");
return 0;
}
//
// print.hpp
// function_adaptor
//
// Created by IDM-PKUSZ on 14-9-3.
// Copyright (c) 2014年 PKU. All rights reserved.
//
#ifndef function_adaptor_print_hpp
#define function_adaptor_print_hpp
#include <iostream>
template <class T>
inline void PRINT_ELEMENTS(const T & coll, const char * optcstr="")
{
typename T::const_iterator pos;
std::cout << optcstr;
for(pos=coll.begin();pos!=coll.end();++pos)
std::cout << *pos << ' ';
std::cout << std::endl;
}
#endif
透过一些特殊的函数配接器,你可以将预先定义的仿函数和其它数值组合在一起。
下面是在Mac OS下的运行结果:

浙公网安备 33010602011771号