![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 71
turing-complete
这个作者很懒,什么都没留下…
展开
-
最大子段和绝对值
#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 · 934 阅读 · 0 评论 -
最大子段和 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 · 2761 阅读 · 0 评论 -
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 · 1966 阅读 · 0 评论 -
二叉树中任意两个节点间的距离 源码
#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 · 1555 阅读 · 0 评论 -
中英混串转拼音 源码
/* 本程序只对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 · 2999 阅读 · 0 评论 -
如何让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 · 2420 阅读 · 0 评论 -
自然对数底——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 · 2028 阅读 · 0 评论 -
语法和语义上的 “不能!”
在学习程序设计语言的时候,教程里往往会出现“能”这样和“不能”那样的句型,来告诉我们在编程的时候哪些是可以做,而那些是不可以做的。本文要说明的是,在程序设计语言里“能”和“不能”分为语法上的和语义上的。当我们将语义上的不能理解成语法上的不能的时候,就会产生一些疑问。下面是几个例子,有的合适,有的可能牵强,但是意思差不多。函数内返回临时变量的引用和指向临时变量的指针使用C++标准流输原创 2011-11-27 14:41:39 · 1042 阅读 · 0 评论 -
致爱捣鼓虚表的童鞋
下面这个例子,读起来可能有些晦涩,但是读懂了对于理解C++的函数调用约定、函数指针、动态绑定、虚函数表 和 多态机制有极大的帮助。32位机下的VS2008和VS2010环境下可直接复制代码运行,其他版本编译器未测试。不采用默认的函数调用约定__thiscall的原因是,这种约定会把this指针的值直接放到寄存器ECX中,而不是将其入参数栈。当采用常规的成员函数调用方式的时候,ECX会被填入原创 2011-10-21 16:59:37 · 2955 阅读 · 0 评论 -
不出错不是错
最近看见论坛里,很多人问一些看似很诡异、实际上道理却是很简单的问题。对这类问题的回答可笼统概括为:编译器,有义务为在游戏规则内的代码做正确的翻译。但是,对于不按套路出牌的代码,它 有最终解释权。我们应当做的事情是,好好学习C++标准(当然,遇到VC6这样的流氓编译器,我们也只能干认倒霉。),知道写什么样的代码能够完成什么样的行为。不应当过于纠结于为什么有些代码应该出错而原创 2013-09-17 20:52:05 · 1408 阅读 · 2 评论 -
不用判断语句求出两数较大值
原题:两个整型数,不准用if 、switch 、?:等判断语句求出两者较大者(更有甚者只让用一条语句)最近的笔试题中,此题出现频率不小,论坛上也时有人问起,此文给出C语言版的一种解决方案(得较小者同理)。为说明问题方便,不使用一条语句,理解思路后稍作改动便可以换成一条语句。代码如下:/* 不准使用任何判断语句和库函数,获取两个整型数据中的较大值 */#include /*原创 2011-10-25 15:26:43 · 3796 阅读 · 4 评论 -
学了C++,遗忘了C
很多C++程序员,应该说是绝大多数,都学过C语言。也都知道,C++是完全兼容C的。在C++和C都作为面向过程开发语言时,这个“兼容”是有两层含义的:第一,C中的代码复制到cpp文件里,理论上应当可以通过(实际上这一点不能完全做到)。第二,C++代码,代码在C文件里是不一定允许编译的。第二点是会慢慢被C++程序员所遗忘的,至少我是应当感到惭愧的其中之一。下面一一列举一些,面向过程中易原创 2010-09-27 14:39:00 · 3546 阅读 · 6 评论 -
话说复制构造与赋值函数
此文要谈的两个概念,算是C++中的big three(构造、赋值和析构)中的1.5个。也是在使用过程中,很容易混淆的两个函数。它们的相似点: 1、当编写一个类的时候,我们没有显式编写它们,编译器都会自动生成一个具有浅拷贝语义(对逐个成员进行位拷贝)的版本。 2、它们被调用的语句,都极少以函数声明的原型形式进行,而是一些用法会触发编译器对他们的调用。也就是说它原创 2011-11-02 10:41:25 · 878 阅读 · 0 评论 -
用 cin 输入整数死循环问题
本文,主要解决用标准库输入流std::cin输入整数的时候,如果误输入了字符产生的死循环问题。这也许是C++灵活的背后,给程序员所带来的一些问题,这个问题标准库的建设者们确实应该考虑升级一下。最近,见论坛里又常有人问起,方法比较简单,代码如下:#include#include // 带容错功能的控制台整数输入函数int input_int(){ int原创 2011-10-17 20:00:50 · 4287 阅读 · 2 评论 -
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 · 1884 阅读 · 1 评论 -
C++ 史上最华而不实的类
下面大家要看到这个类完全是扯淡,一无是处。它是由感而发于帖子C++的二维数组转置。当时,看完帖子我就在想,能不能用重载的方式实现逻辑转置?只是好奇。C++显然是不能重载两个 [][] ,但是要达到这个效果,只要让 [] 操作符返回一个指针即可。问题是这样根本做不到一个逻辑上的转置,经与码友讨论生出用两个类重载[]操作符这么一条计策。于是,便产生了它。它“华”到一个模板类中还定义有一个嵌原创 2011-10-27 09:00:39 · 1729 阅读 · 1 评论