| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2470 人关注过本帖
标题:发现C++不是一般的强大……
只看楼主 加入收藏
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
结帖率:90%
收藏
 问题点数:0 回复次数:13 
发现C++不是一般的强大……
谁知道这个程序做了什么,并且是怎么做到的?

顺便问问,有没有比较简单的方法做到这种效果?

[it]改成了比较一般化的变量名,现在应该很容易看出功能了- -[/it]


/*****************************************************************
** HighlightCodeV3.0 software by yzfy(雨中飞燕) http:// **
*****************************************************************/
#include <iostream>
#include <functional>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;

struct stu
{
   
string name;
    int data[4];

    static bool comp(const stu& s1,const stu& s2,int i)
    {
        
return s1.data[i] < s2.data[i];
    }

   
void print()
    {
        
printf("%s %d %d %d %d\n",name.c_str(),
                data[0],data[1],data[2],data[3]);
    }

}
;

template<class T,class third_t,class ret_t>
struct binder3rd : binary_function<T,T,ret_t>
{
protected:
    ret_t (*m_func)(const T&,const T&,third_t);
    third_t m_third;
public:
    binder3rd(ret_t (*func)(const T&,const T&,third_t),third_t third)
            :m_func(func),m_third(third){}

   
ret_t operator()(const T& s1,const T& s2)
    {
        
return m_func(s1,s2,m_third);
    }
}
;

template<class T,class third_t,class ret_t>
binder3rd<T,third_t,ret_t> bind3rd(ret_t (*func)(const T&,const T&,third_t),third_t i)
{
   
return binder3rd<T,third_t,ret_t>(func,i);
}

vector<stu> t;

int main()
{
   
stu s[4]=
    {
        {
"aaa",1,2,3,4},
        {"bbb",3,4,2,1},
        {"ccc",2,3,4,2},
        {"ddd",4,1,1,3}
    }
;

    for_each(s,s+4,mem_fun_ref(&stu::print));
    putchar('\n');

    for (int i=0;i<4;i++)
    {
        
sort(s,s+4,bind3rd(&stu::comp,i));
        for_each(s,s+4,mem_fun_ref(&stu::print));
        putchar('\n');
    }
}


[[it] 本帖最后由 StarWing83 于 2008-6-24 09:45 编辑 [/it]]
搜索更多相关主题的帖子: color 
2008-06-24 09:11
yyow3193
Rank: 1
来 自:三峡宜昌
等 级:新手上路
帖 子:165
专家分:0
注 册:2008-6-5
收藏
得分:0 
发现LZ不是一般的强
2008-06-24 09:22
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
虽然代码长了点,但是的确做到了动态生成函数的功能……

如果能直接支持变量做模板参数就好了,不需要自己写绑定代码了……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-06-24 09:26
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
看不太懂。。。。。。

好多方法都不知道什么意思,顶了先!

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-06-24 09:32
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
翅膀里面用了很多c++的概念。。继承,重构。。。慢慢来。。。我刚也对运算符()看了好一会。。

学习需要安静。。海盗要重新来过。。
2008-06-24 10:20
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
靠·一堆STL,没看过。。 - -

樱花大战,  有爱.
2008-06-24 10:58
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
事实上,里面只有三个地方是STL:for_each,sort和vector……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-06-24 10:59
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
你继承那个不是标准模板?

樱花大战,  有爱.
2008-06-24 11:02
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
那个也算么……其实继承不继承都无所谓,那个东西内容是空的……
我只是说明,那是个函数才继承的……
你看不惯可以去掉那个继承,运行也正常的- -

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-06-24 11:24
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
回复 9# StarWing83 的帖子
很强大,最近在学STL?

樱花大战,  有爱.
2008-06-24 12:07
快速回复:发现C++不是一般的强大……
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037878 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved