- 论坛徽章:
- 0
|
本帖最后由 wkx9dragon 于 2011-10-12 10:56 编辑
有时候真的觉得,编写一个函数对象去适应STL算法真的很麻烦,还不知道效率如何,最后用添加一个临时容器,一个交换解决swap。
听说当年的 unary_function,binary_function,bind1st,bind2nd,等等都不推荐了(Deprecated),啊!啊!啊!,我到现在都没学会呀,情何以堪。想用新的std::function,std::bind,发现还没完全会使。c++大牛说,尽量用函数对象取代函数,去适应STL算法。去死!去死!时髦的Lamda写法太丑了,还不如写一个函数对象呢,好看呢。我觉得C++让我编程时,花了太多的时间在选择上了,是用引用的,还是指针呢,还是干脆变量好了。是STL for_each算法呢,还是手写循环呢,还是for(auto x : V),还是BOOST_FOREACH,还是for( auto itr=v.begin();itr !=v.end();itr++) 等等,等等,每种方法都有优缺点,而且常常是不可替代的,因为选择任意一条,都会对数据定义,变量的使用带来变化。C就好像使用筷子,吃什么都用他,C++好像就是一堆餐具,(不是西餐具,因为筷子也在里面),你吃东西时,常常会为用哪个餐具而发呆。
//
比如:
typedef std::vector<std::string> Container;
Container fileList;
if (vm.count("filter") ){
string filter=vm["filter"].as< string > ();
regex re(filter);
Container v;
BOOST_FOREACH( string fname,fileList){
if( regex_search(fname,re) ) v.push_back(fname);
}
fileList.swap(v);//还是它简单。
//remove_if(fileList.begin(),fileList.end(),std::bind(std::regex_search,_1,re) );这个就不会编,编译器老提示出错。
} |
|