- 博客(20)
- 资源 (17)
- 问答 (2)
- 收藏
- 关注
原创 不出错不是错
最近看见论坛里,很多人问一些看似很诡异、实际上道理却是很简单的问题。对这类问题的回答可笼统概括为:编译器,有义务为在游戏规则内的代码做正确的翻译。但是,对于不按套路出牌的代码,它 有最终解释权。我们应当做的事情是,好好学习C++标准(当然,遇到VC6这样的流氓编译器,我们也只能干认倒霉。),知道写什么样的代码能够完成什么样的行为。不应当过于纠结于为什么有些代码应该出错而
2013-09-17 20:52:05
1474
1
原创 中英混串转拼音 源码
/* 本程序只对GB2312编码有效 *//* 汉字读音分界点处的码值数组 */static const unsigned short code_pin[] = { 0xb0a1,0xb0a3,0xb0b0,0xb0b9,0xb0bc,0xb0c5,0xb0d7,0xb0df,0xb0ee,0xb0fa,0xb1ad,0xb1bc,0xb1c0,0xb1c6, 0xb1de
2012-06-15 08:58:12
3043
原创 二叉树中任意两个节点间的距离 源码
#include #include template struct BNode { BNode(T d) { data = d; left = NULL; right = NULL; } void visit() { std::cout << data << std::endl; }
2012-06-10 15:33:06
1598
原创 二叉树的三种遍历算法 源码
VisitBiTree.javapackage biTree;import java.util.Stack;//二叉树的遍历类public class VisitBiTree { /* 访问时机:遇到不为空的则访问它,右孩子入栈,转而去左孩子 */ // 非递归先序遍历 public void preOrder(BNode node) {
2012-06-10 15:04:28
4532
原创 LCS C语言源码
#include #include #include char* lcs(const char *str1, const char *str2) { int m = strlen(str1) + 1; int n = strlen(str2) + 1; int capacity = m * n * sizeof(int); int *record = (in
2012-06-09 12:05:02
2002
原创 最大子段和绝对值
#include typedef struct { size_t st; size_t end; int sum;} ArraySection;/* 求整型数组的子段,使其和的绝对值最大,结果存于ret */void max_abs_section(int *arr, size_t len, ArraySection *ret_sec){ size
2011-12-08 13:17:27
1006
原创 最大子段和 C语言源码
#include typedef struct { size_t st; size_t end; int sum;} ArraySection;/* 求整型数组的最大子段和,结果存于ret */void max_section(int *arr, size_t len, ArraySection *ret) { size_t st = 0, end
2011-12-07 11:48:16
2809
原创 如何让C++ 和 STL 为C服务
实验环境:win XP , VS2008实验中用C++语言使用STL类编写了一个字符串排序的接口,将其导出为DLL,目的是演示C++如何编写能让C调用的函数。首先,新建一个C++空项目名称为DLL_CPP_API,将项目的输出文件类型设置为dll,添加下面两个文件/* DLL_API.h */#define DLL_EXPORT// 导出时需定义此宏#ifdef DLL_E
2011-11-30 22:20:17
2464
原创 自然对数底——e 之美
收敛速度惊人#include /* 自然对数的底e = 2.718281828... */double GenerateBaseE(const size_t N) { double ret = 1.0; unsigned long long k = 1; for (size_t i = 1; i <= N; ++i) { k *= i;
2011-11-27 15:56:22
2075
原创 语法和语义上的 “不能!”
在学习程序设计语言的时候,教程里往往会出现“能”这样和“不能”那样的句型,来告诉我们在编程的时候哪些是可以做,而那些是不可以做的。本文要说明的是,在程序设计语言里“能”和“不能”分为语法上的和语义上的。当我们将语义上的不能理解成语法上的不能的时候,就会产生一些疑问。下面是几个例子,有的合适,有的可能牵强,但是意思差不多。函数内返回临时变量的引用和指向临时变量的指针使用C++标准流输
2011-11-27 14:41:39
1102
原创 C语言版 topK 算法实现
/* topK算法实现 */#include /* 调整小顶堆,pos:唯一违反堆性质的点的位置 */void heapify(int *arr, const size_t len, size_t pos){ int min; size_t child = (pos * 2) + 1;// 左孩子 while (1) { if (chil
2011-11-07 15:43:59
1946
2
原创 话说复制构造与赋值函数
此文要谈的两个概念,算是C++中的big three(构造、赋值和析构)中的1.5个。也是在使用过程中,很容易混淆的两个函数。它们的相似点: 1、当编写一个类的时候,我们没有显式编写它们,编译器都会自动生成一个具有浅拷贝语义(对逐个成员进行位拷贝)的版本。 2、它们被调用的语句,都极少以函数声明的原型形式进行,而是一些用法会触发编译器对他们的调用。也就是说它
2011-11-02 10:41:25
917
原创 C++ 史上最华而不实的类
下面大家要看到这个类完全是扯淡,一无是处。它是由感而发于帖子C++的二维数组转置。当时,看完帖子我就在想,能不能用重载的方式实现逻辑转置?只是好奇。C++显然是不能重载两个 [][] ,但是要达到这个效果,只要让 [] 操作符返回一个指针即可。问题是这样根本做不到一个逻辑上的转置,经与码友讨论生出用两个类重载[]操作符这么一条计策。于是,便产生了它。它“华”到一个模板类中还定义有一个嵌
2011-10-27 09:00:39
1760
1
原创 不用判断语句求出两数较大值
原题:两个整型数,不准用if 、switch 、?:等判断语句求出两者较大者(更有甚者只让用一条语句)最近的笔试题中,此题出现频率不小,论坛上也时有人问起,此文给出C语言版的一种解决方案(得较小者同理)。为说明问题方便,不使用一条语句,理解思路后稍作改动便可以换成一条语句。代码如下:/* 不准使用任何判断语句和库函数,获取两个整型数据中的较大值 */#include /*
2011-10-25 15:26:43
3850
2
原创 致爱捣鼓虚表的童鞋
下面这个例子,读起来可能有些晦涩,但是读懂了对于理解C++的函数调用约定、函数指针、动态绑定、虚函数表 和 多态机制有极大的帮助。32位机下的VS2008和VS2010环境下可直接复制代码运行,其他版本编译器未测试。不采用默认的函数调用约定__thiscall的原因是,这种约定会把this指针的值直接放到寄存器ECX中,而不是将其入参数栈。当采用常规的成员函数调用方式的时候,ECX会被填入
2011-10-21 16:59:37
2990
原创 用 cin 输入整数死循环问题
本文,主要解决用标准库输入流std::cin输入整数的时候,如果误输入了字符产生的死循环问题。这也许是C++灵活的背后,给程序员所带来的一些问题,这个问题标准库的建设者们确实应该考虑升级一下。最近,见论坛里又常有人问起,方法比较简单,代码如下:#include#include // 带容错功能的控制台整数输入函数int input_int(){ int
2011-10-17 20:00:50
4392
1
转载 航天飞机的宽度是由马屁股决定的
现代铁路两条铁轨之间的标准距离是4.85英尺,大约1.435米,可相当多的人并不知道,为什么要采用这个标准?原来,早期的铁路是由造电车的人设计的,而四英尺又八点五英寸正是电车所用标准。那么,电车的标准又是从哪里来的呢?最先造电车的人以前是造马车的,所以电车的标准沿用了马车
2011-08-02 10:48:03
1224
原创 学了C++,遗忘了C
很多C++程序员,应该说是绝大多数,都学过C语言。也都知道,C++是完全兼容C的。在C++和C都作为面向过程开发语言时,这个“兼容”是有两层含义的:第一,C中的代码复制到cpp文件里,理论上应当可以通过(实际上这一点不能完全做到)。第二,C++代码,代码在C文件里是不一定允许编译的。第二点是会慢慢被C++程序员所遗忘的,至少我是应当感到惭愧的其中之一。下面一一列举一些,面向过程中易
2010-09-27 14:39:00
3648
1
原创 C# ++运算符的重载
很多语言都允许程序员使用运算符重载,尽管从编程的角度看,这没有其必要性,但是对于代码来讲可以提高它的可读性,带来许多方便之处。最简单的例子就是,我们用String类的时候,用“+”运算符直接实现字符串的连接,很方便很直观。虽然,Java不允许重载运算符,但是在它在类库级别上也重载了String类的“+”运算符。C#和C++一样,提供了运算符重载机制。但是,它的要求要严格一些,这里提一下C#中自增运算符“++”的重载使用。在C++中,要体现前置++运算,总是要给其添加一个int类型的参数,尽管我们用不上它。在
2010-09-13 09:08:00
4791
原创 C# 函数中的out型参数
首先,在函数的参数参数列表中,out关键字一定要放在类型前面。否则,会产生几个编译时错误。第二,在函数的声明时和调用中,都要加out关键字。Eg:namespacePolymorphy{ internalclassProgram { staticvoidMain(string[] args) { inta; ATypeinstance; instance.Display(/*out*/ a);
2010-09-12 14:56:00
9937
1
纯C++ 文件流 处理函数
2011-10-20
谁能给一个官方的答案
2011-04-21
验证http代理服务器的方法
2011-03-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人