这各部分主要是一些很实用和在一些地方帮助编译器自动推断类型的库和函数 首先是引用包装 类名 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*…C++ STL终于会放点实用的东西了。可喜可贺。
这个,显然是正则表达式库,作为一个强大而又NB的库,我表示对其理解甚少,只能先研究下基本用法,更具体的用法要等实际应用中用到的时候在细看了。 PS:正则表达式的资料见 http://www.regexlab.com/ 更多资料见 https://www.owent.net/2011/264.html
这回的两个库没怎么用过,这里的记录就用VC++写了,使用G++和BOOST的时候和智能指针类似。
首先是Tuple库
要注意的是这里G++,VC++和BOOST库的函数不太一样,所以使用的时候要注意没有使用到编译器和编译器相关的函数(特别是IDE的弹窗的方法要注意)。
C++ 0x/11 终于通过了,真是个很爽的消息。于是乎我决定对新的东西系统学习一下。
首先当然要从tr1开始,智能指针实际上我已经用过很多次了,但是为了完整起见,还是写出来记录一下。
当然,从简单到复杂,现在接触的部分不是很复杂,不过暂时够用了。
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
网站及网页:
基本知识中文学习站(中):http://www.w3school.com.cn
W3C官网(英):http://www.w3.org/
HTML 4.01规范(英):http://www.w3.org/TR/html4/
XHTML™ 1.1规范(英):http://www.w3.org/TR/xhtml11/
CSS官方文档(多国语言):http://www.w3.org/Style/CSS/
HTML5规范(英):http://www.w3.org/TR/html5/
jQuery(包含UI)官方文档(英):http://api.jquery.com/browser/
我们学校的资源列表(ECUST)
用Ubuntu的人,只要把有线和无线网络设置为IPV6自动,然后取消下面的需要IPV6
来建立连接就可以用校园网反问IPV6站点了。反正我就这么搞定了
all in http://ipv6.ecust.edu.cn
校内IPv6网络资源
学校做项目顺便写的,还是有点用的。
/***
* 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的次数,取大(小)的一项},
题目链接:http://poj.org/problem?id=1474
写这题的目的是看完了zzy的论文,写了半平面交,验证一下正确性,结果发现我写的问题还是很多的。
题目大意是问能不能放一个摄像机,使得摄像机能看到整个多边形内部。
这题和1279和3130差不多,过了这题再去对付那两题就简单多了。
/**
* 二维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);
}
//相对原点的差乘结果…The 35th ACM/ICPC Asia Regional Tianjin Site —— Online Contest
2010年天津赛 网络赛 I题 Convex
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3629
题目大意是给你700个点,问从中选4个点组成凸四边形的方法数
比赛的时候其实最终得到了正确的方法,结果因为写搓了导致TLE,HDU的64位整形必须用I64d,导致WA
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…