博文
C++ study links(2010-04-30 11:51:00)
摘要:
http://blog.vckbase.com/bastet/archive/2005/03/27/4080.html......
ACM 常用代码(非常全)也有与ACM相关的STL常用简介 ,很全面…… 感觉好(2010-04-29 14:49:00)
摘要:http://download.csdn.net/source/2279977
| 弦图的PERFECT ELIMINATION 点排列 .......................... 7
| 稳定婚姻问题 O(N^2) .................................................. 8
| 拓扑排序 ......................................................................... 8
| 无向图连通分支(DFS/BFS 邻接阵) ............................. 8
| 有向图强连通分支(DFS/BFS 邻接阵)O(N^2) ............ 8
| 有向图最小点基(邻接阵)O(N^2)............................... 9
| FLOYD 求最小环 .............................................................. 9
| 2-SAT 问题 ..................................................................... 9
Network 网络流 ................................... 11
| 二分图匹配(匈牙利算法DFS 实现) ...................... 11
| 二分图匹配(匈牙利算法BFS 实现) ...................... 11
| 二分图匹配(HOPCROFT-CARP 的算法) .................. 11
| 二分图最佳匹配(KUHN MUNKRAS 算法O(M*M*N)) 11
| 无向图最小割 O(N^3) ............................................... 12
| 有上下界的最小(最大)流 .......................................... 12
| DINIC 最大流 O(V^2 * E) ......................................
ACM 常用代码(非常全)也有与ACM相关的STL常用简介 ,很全面…… 感觉好(2010-04-29 14:49:00)
摘要:ACM 常用代码(非常全)也有与ACM相关的STL常用简介 ,很全面……
感觉好了,就回头顶一下
http://download.csdn.net/source/2281254
目录
一.数论 4
1.阶乘最后非零位 4
2. 模线性方程(组) 4
3. 素数表 6
4. 素数随机判定(miller_rabin) 6
5. 质因数分解 7
6. 最大公约数欧拉函数 8
二.图论_匹配 9
1. 二分图最大匹配(hungary邻接表形式) 9
2. 二分图最大匹配(hungary邻接表形式,邻接阵接口) 10
3. 二分图最大匹配(hungary邻接阵形式) 10
4. 二分图最大匹配(hungary正向表形式) 11
5. 二分图最佳匹配(kuhn_munkras邻接阵形式) 11
6. 一般图匹配(邻接表形式) 12
7. 一般图匹配(邻接表形式,邻接阵接口) 13
8. 一般图匹配(邻接阵形式) 14
9. 一般图匹配(正向表形式) 15
三.图论_生成树 16
1. 最小生成树(kruskal邻接表形式) 16
2. 最小生成树(kruskal正向表形式) 17
3. 最小生成树(prim+binary_heap邻接表形式) 19
4. 最小生成树(prim+binary_heap正向表形式) 20
5. 最小生成树(prim+mapped_heap邻接表形式) 21
6. 最小生成树(prim+mapped_heap正向表形式) 22
7. 最小生成树(prim邻接阵形式) 23
8. 最小树形图(邻接阵形式) 24
四.图论_网络流 25
1. 上下界最大流(邻接表形式) 25
2. 上下界最大流(邻接阵形式) 26
3. 上下界最小流(邻接表形式) 27
4. 上下界最小流(邻接阵形式) 29
5. 最大流(邻接表形式) 30
6. 最大流(邻接表形式,邻接阵接口) 31
7. 最大流(邻接阵形式) 32
8. 最大流无流量(邻接阵形式) 32
9. 最小费用最大流(邻接阵形式) 33
五. 图论_最短路径 34
1. 最短路径(单源bellman_ford邻接阵形式) 34
2. 最短路径(单源dijkstra_bfs邻接表形式) 35
3. 最短路径......
什么是高级C++?——软件工业化时代的C++价值观(2008-12-25 13:09:00)
摘要:什么是高级C++?
——软件工业化时代的C++价值观
孟岩
《程序员》杂志社
开门见山
主要论点:
1. C++本质上是一种重“创新”而轻“生产”的语言,到目前为止仍然是主流语言中最适合技术创新的一个;
2. 1995年之前,整个软件产业处于“创新为王”的阶段,C++是最适合这个阶段的语言,这是C++红极一时的大背景和根本原因。
3. 1995年发生了一系列影响深远的事件,软件产业整体上转向工业化,为了支持工业化,创新的重点由技术创新转向体系创新。然而C++没有能够迅速适应这一变化。
4. 今天,C++应当准确定位,弥补不足,有针对性地发展,它将仍然是最重要的几种工业级语言之一。
从一本书说起
James Coplien,Advanced C++ Programming Styles and Idioms, Addison Wesley, 1991
—— 市面上唯一一本名副其实的“高级”C++书(Scott Meyers)
●面向对象特性的运用和把握
●面向对象的程序风格
●动态特征的运用和超越
●符号语言模拟
●设计模式
这本书代表了当时专家们对于“高级C++”的理解,换句话说代表了当时C++社群的一个审美价值取向。我们看到了什么?技术、技巧、风格、模式,但没有与工程相关的东西。更有意思的事情是,这本书的中文版12年后被剽窃出版,此时书中对于C++面向对象能力发挥到了我当时没有想到的程度。这说明即使在 template被广泛应用之前,C++语言的技巧性就达到了如此的高度。然而耐人寻味的是,书中最高深的技巧从来就没有在C++实践中流行过。
另一本书...
Scott Meyers, Effective C++ ,1991年第1版,1998年第二版,2005年第三版。
●来自教学经验
●最初想开发一个代码扫描工具
●包含实际工程建议
●历史上......
SIP开发环境的搭建(2008-12-22 11:53:00)
摘要:要在windows或者linux平台下开发基于SIP的软电话,需要以下软件
服务器端软件: 注册多个客户端到服务器上,可以进行通话测试
SIP客户端软件:主要用于测试,可以对别人已经完成的客户端进行抓包,以比对自己程序的发包数据
SIP协议栈:基于某个现成的SIP协议栈来开发会加快开发进度
RTP栈:传输语言或者视频数据的协议栈
抓包测试工具:调试网络程序最有效的办法
以下介绍这些软件主要以开源软件为主
一 服务器端软件
1. Asterisk:Linux系统下开源的IPPBX,功能强大稳定,主要用c语言开发。配置稍麻烦。 http://www.asterisk.org/
2. Vocal:Linux系统下开源的SIP服务器端。可以作为IPPBX也可以作为运营系统。很多voip虚拟运营商都用这个作为自己的运营系统。提供BS结构的管理界面。http://www.vovida.org/
3. YATE:跨平台(Linux,Windows)的开源SIP服务器端。在windows下安装非常简单。其他方面没有进行过测试。http://yate.null.ro/pmwiki/
4. SER:Linux平台下重量级的SIP服务器断。功能比较丰富,也是很多voip虚拟运营商的系统选择。不过据说配置比较麻烦,具体没有试过。http://www.iptel.org/ser/
5. sipX:Linux平台下的SIP服务器。这个好像不能作为客户端再次注册到其他SIP服务器上。提供BS结构的管理界面。 http://www.sipfoundry.org
二 SIP客户端软件
1. Windows Messenger 5.1:微软出的SIP客户端,操作方便。
2. YATE Client:跨平台(Linux,Windows)的开源SIP客户端软件。安装方便,功能简单。http://yate.null.ro/pmwiki/
3. xten:windows平台下的SIP软电话。功能齐全,使用方便。http://www.xten.com/
三 SIP协议栈
1. osip:跨平台的开源SIP协议栈。用c语言实现,体积小。http://www.gnu.org/software/osip/
2. exosip:对osip进行封装,使其方便SIP客户端软件开发。同样......
几种开源SIP协议栈对比(2008-12-22 11:52:00)
摘要:
随着VoIP和NGN技术的发展,H.323时代即将过渡到SIP时代,在H.323的开源协议栈中,Openh323占统治地位,它把一个复杂而又先进的H.323协议栈展现在普通程序员的眼前,为H.323普及立下了汗马功劳。而然当在SIP时代,则出现了群雄割据的状况,SIP相对于 H.323简单,灵活,于是各种协议栈层出不穷,下面将详细对比最具有代表性的5个开源项目:OPAL,VOCAL,sipX,ReSIProcate, oSIP
OPAL是Open Phone Abstraction Library,是Openh323的下一个版本,它仍然使用了Openh323的体系结构,并在其基础上进行扩展,同时实现了SIP,H.323,但在音频和视频的编码和传输部分有较大改动。OPAL初衷设计是包含任何电话通信协议,所以其底层进行了高度的抽象化,所以也能够很容易的支持MGCP, PSTN和将来会出现的协议。不过由于Openh323的最后一个版本还在开发中,所以原本6月发布的OPAL也被推迟,现有的OPAL还非常不完善, BUG也非常多,不过相信以Openh323的开发班底,一定能让OPAL十分优秀。
CVS : :pserver:anonymous@cvs.sourceforge.net:/cvsroot/openh323/opal
Language : C++
VxWorks port : Yes
Win32 port : Yes
Linux port : Yes
Supports RFC 3261 : Yes
Supports RFC 2327 : Yes
Supports RFC 3264 : Yes
Supports RFC 3263 : No
Supports RFC 3515 : Yes
Supports RFC 3262 : No
Supports RFC 3311 : No
TCP : Yes
UDP : Yes
SIZE : 8MB
License : MPL
Document : None
Samples : UA,GK
VOCAL是vovida.org开发的SIP系统,VOCAL应该是目前功能最完善......
c c++ include机制简述[转](2008-08-27 08:54:00)
摘要:1.引言
做c/c++编程的对#include指令都不会陌生,绝大多数也都知道如何使用,但我相信仍有人对此是一知半解,
C:
#include <stdio.h>
C++:
#include <iostream>
表示包含C/C++标准输入头文件。包含指令不仅仅限于.h头文件,可以包含任何编译器能识别的C/C++代码文件,包括.c,.hpp,.cpp,.hxx,.cxx等,甚至.txt,.abc等等都可以
2.名词解释
preprocess
预处理:为方便编译器处理而设置的一种机制,包括一些常用预处理指令和语句,我们统称为预处理系统。
如#include #define #if...#else...#endif #pragma等
这些指令的实现是由编译器来决定的(implementation specified)
提到预处理指令,顺便说一下头文件防止重复包含的2种方法
a.保护宏(暂且称为Macro guard 宏卫兵?):
#ifndef _ABCDE_H
#define _ABCDE_H
/*
代码部分
*/
#endif
在被包含过一次之后,宏_ABCDE_H已经有了,下次再碰到就会略过从#define _ABCDE_H开始到#endif之间的代码
还有一种特定编译器支持的指令:
b.#pragma once
能保证该文件(物理上的)只被编译一次,也能起到防止重复包含的作用
但这2种方式是有区别的:
a.Macro guard可移植性好,绝大多数编译器都支持,而且万一不小心拷贝了几分相同的代码也不会出问题,但你得确保这个宏名不会与其他的宏冲突,否则等编译器报出一大堆错误的时候你可能会觉得莫名其妙;
b.#pragma once指令简单,它能保证该文件(物理上的)只被编译一次,不用去费劲的想不同的宏名,但如果有几份该文件的拷贝,显然起不到作用。
declaration
声明:指将一个名称引入当前编译单元,或者重新声明一个前面已经声明过的名称,声明指定了如何解释一个名称和该名称具有的属性;
例如:
int main(void)
{
int a;&nbs......
C++程序中的内存划分(2008-04-28 16:21:00)
摘要:点击原文
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。
堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。
常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改......
复杂指针解析[转](2008-01-09 15:55:00)
摘要:右左法则----复杂指针解析
----本文转自http://www.briup.com.cn/export/sites/briup/technology/modules/news/cpp/news_0007.html_410175175.html
因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法
则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用
来解决如何辩识一个声明的,两者可以说是相反的。右左法则的英文原文是这样说的:
The right-left rule: Start reading the declaration from the innermost parentheses, go right, and then go left. When you
encounter parentheses, the direction should be reversed. Once everything in the parentheses has been
parsed, jump out of it. Continue till the whole declaration has been parsed.
这段英文的翻译如下:
右左法则:首先从最里面的圆括号看起,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东
西,就跳出圆括号。重复这个过程直到整个声明解析完毕。
笔者要对这个法则进行一个小小的修正,应该是从未定义的标识符开始阅读,而不是从括号读起,之所以是未定义的标识符,是因为
一个声明里面可能有多个标识符,但未定义的标识符只会有一个。
现在通过一些例子来讨论右左法则的应用,先从最简单的开始,逐步加深:
int (*func)(int *p);
首先找到那个未定义的标识符,就是func,它的外面有一对圆括号,而且左边是一个*号,这说明func是一个指......
[C++] 斐波那契数列 (2007-12-01 19:29:00)
摘要:
来源:蚂蚁的 C/C++ 标准编程 作者:Antigloss 等级:一般
发布于2007-06-16 11:46 被读1063次 【字体:大 中 小】
菲波那契数列(Fibonacci sequence)指的是这样一个数列:
1,1,2,3,5,8,13,21,34,55,……
这个数列从第三项开始,每一项都等于前两项之和。可将其递归定义为:
F(1) = 1
F(2) = 1
F(n) = F(n - 1) + F(n - 2) n > 2
因此,可用递归的办法编写程序计算该数列第 N 项的值:
// header inherited from ISO C
#include <cassert> // for assert
// boost header
#include <boost/bigint.hpp> // for bigint
boost::bigint fibonacc......