这各部分主要是一些很实用和在一些地方帮助编译器自动推断类型的库和函数 首先是引用包装 类名 template< class T > class std::reference_wrapper; 这个类保存了对一个类实例、(成员)函数(指针) 构造时必须传入所引用的对象或引用对象的右值引用 主要方法有 =号操作符, 用于重新绑定引用对象 类型转换操作符, 用于转换为模板目标类的引用类型 get方法, 用于获取引用的对象 ()操作符, 用于执行引用的函数

绑定函数是我认为C++新标准里第二有用的库了 绑定库的使用环境是:

  • GCC-C++ 4.3 及以上
  • Visual Studio 2008 SP1 及以上
  • BOOST 1.25及以上(其中function是1.16及以上)

先来看一段代码

#include <iostream>
#include <cstdio>
#include <memory>
#include <functional>

class button
{
public:

    std::function<void(int)> onClick;
};

class player
{
public:

    void play(void* sender, int param) {
        printf("Play: %d => %d\n", (int)sender, param);
    };
    void stop(void*…

这回的两个库没怎么用过,这里的记录就用VC++写了,使用G++和BOOST的时候和智能指针类似。

首先是Tuple库

要注意的是这里G++,VC++和BOOST库的函数不太一样,所以使用的时候要注意没有使用到编译器和编译器相关的函数(特别是IDE的弹窗的方法要注意)。

Linq是.NET 3里新增的东西,我在软件工程课程设计里初步应用到一点,而且主要用在Lambda表达式上,今天算是在好奇心驱动下尝试了一下在数据库方面的应用。

在数据库数据层自动化上,Linq强大地让我很惊喜。

好久没写这种类型的代码,感觉真是退步了很多。 这是我第一次参加Google Code Jam,以前有过报名可是没有做过。 我发现Google Code Jam的题目使用经典算法的几乎没有,都是模拟或者数学题(起码我目前做过的几题是这样)

很多时候看到C/C++的一些奇妙的应用,每次都是惊奇一点时间就随风飘过了 现在我还是决定记录一下这些有意思的东西。

2010/04

a ^= b ^= a ^=b; 这是一个交换值得有意思的方式

// 统计1的个数的有意思的方式
int count_bin_one(int x) {
    return x? 1 +  count_bin_one(x & (x - 1)): 0;
}

2011/04

同学去爱立信参加笔试+面试碰到的问题 – 1

学校做项目顺便写的,还是有点用的。

/***
 * JQuery扩展插件--提示信息
 *
 * 本函数用于创建提示信息
 *
 * Example
 * <code>
 *      var t = $.noticeMessage(msg, a, b);
 * </code>
 *
 *
 * function noticeMessage([msg, a,b])
 * @Param  {
 *      msg:    信息内容(默认: Notice Message!)
 *      a:      配置选项({expire: 过期时间(默认5秒), time: 过渡时间, from: {起始CSS样式}, to:{最终CSS样式}})
 *      b:      回调函数
 * }
 * @Return {jQuery(msgDiv): 产生的信息DOM组件的jQuery容器}
 *
 *
 * Example:
 * <code>
 *      var…

这是学校USRP项目需要而写的一个类,但是既然写出来了,以后也可能用到,就共享出来吧。

这个类用于解析网页URL的QueryString参数,或者也可以当做操作一些其他设置的类库。

本类库支持任意类型的值的记录,支持JSON语法,支持类似“a=b&c=d”作为设置参数,支持对数组和JSON的转换。

2010.10.11

要为出发做准备了,今天和Ultramanhu和Answeror一起去买了火车票,真是搞笑了,提前六天去买票,竟然动车没坐票了,难道世博就这么猛?只有买周四晚上出发的非动车卧铺票了。顺便带个三国杀什么的去玩,不过估计去的时候也没什么心思玩,等回来的时候再用吧。
回来的时候Answeror推荐我们去吃大娘水饺,然后就去了,我买了半斤水饺,花了25.5块,这么贵,果然学校外面就是贵啊,不过挺好吃的。起码比学校里的好太多了,而且那个水饺很有分量。
今晚协议到线段树的题竟然效率和不用线段树的一样,气死我了,明天看看别人怎么写的,然后改,顺便看看二维线段树,再顺便复习一下树状数组。

2010.10.12

本来打算好好看线段树的,结果线段树的基本操作是会了,可是还是不熟,这个很麻烦啊。今天一定要吧线段树搞定,明天整理一些以前写过的东西车上看看。
好吧,今天我们去买回程票(防止买不到坐票),结果售票员告诉我们明天才能买,原来我们说的提前六天是(12, 18],官方的是[12,18)。这个郁闷了,不过售票员的态度让我很不爽。
今天…

1.RangeMinimum、Maximum Query问题(计算单调区间内出现最多(少)的次数)

对元素的起点做离散化,再把离散化后的位置作为线段树的[l, r),记录次数为t.

对输入区间a, b:

如果(a = b){很好处理},

如果(a = b – 1){分别计算a、b的次数,取大(小)的一项},

/**
 * 二维ACM计算几何模板
 * 注意变量类型更改和EPS
 * #include <cmath>
 * #include <cstdio>
 * By OWenT
 */

const double eps = 1e-8;
const double pi = std::acos(-1.0);
//点
class point
{
public:
    double x, y;
    point(){};
    point(double x, double y):x(x),y(y){};

    static int xmult(const point &ps, const point &pe, const point &po)
    {
        return (ps.x - po.x) * (pe.y - po.y) - (pe.x - po.x) * (ps.y - po.y);
    }

    //相对原点的差乘结果…

Catalan数:

$$ h(1)=1,h(0)=1 $$$$ h(n)=\begin{cases} \sum_{i=0}^{n-1} h(i) \times h(n-i-1) & \text{if }(n>=2) \\\\ \frac{C(2n,n)}{n+1} & \text{if }(n=1,2,3,\mathellipsis) \end{cases} $$

相关结论: n边形能分解成三角形的分法数为 h(n – 2) n个节点能组成的二叉树个数为 h(n) 一个栈(无穷大)的进栈序列为1,2,3,…,n,出栈序列种数为 h(n)

参考(转载): http://zh.wikipedia.org/wiki/%E5%8D%A1%E7%89%B9%E5%85%B0%E6%95%B0 http://baike.baidu.com/view/4076365.htm

/**
 * 简易四则运算(栈实现)
 * #include <stack>
 * #include <cstring>
 */
std::stack<char> opr;
std::stack<double> num;
char oprPRI[256];
//初始化调用
void initCalc()
{
    //优先级设置
    char oprMap[7][2] = { {'+', 1}, {'-', 1}, {'*', 2}, {'/', 2}, {'^', 3}, {'(', 100}, {')', 0} };
    for(int i = 0; i < 7; i ++)
        oprPRI[oprMap[i][0]] = oprMap[i][1];
}
bool checkNum(char c)…

基础函数:

// 最大公约数,欧几里得定理
int gcd(int a, int b)
{
    return b?gcd(b, a % b): a;
}
// 拓展欧几里得定理
// 求解ax + by = gcd(a,b)
int ext_gcd(int a, int b, int &x, int &y)
{
    int tmp, ret;
    if(!b)
    {
        x = 1;
        y = 0;
        return a;
    }
    ret = ext_gcd(b, a % b, x, y);
    tmp = x;
    x = y;
    y = tmp - (a / b) * y;
    return ret;
}
//交换数值
void swap(int &a, int &b)
{
    a ^= b ^= a ^= b;
}

/**
 * a的b次方Mod c…