
c/c++
otuhacker
这个作者很懒,什么都没留下…
展开
-
谈VC++对象模型
——谈VC++对象模型(美)简.格雷程化 译译者前言一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。 Inside the C++ Object Model虽然是一本好书,然而,书的篇幅多一些,又和具体的VC++关系小一些。因此,从篇幅和内容来看,译者认为本文是深入理解C转载 2013-08-04 16:32:06 · 497 阅读 · 0 评论 -
do while(0)在宏定义中的应用
看linux源码时,经常发现有宏定义用#define XYZ \do{...} while(0)这是一个奇怪的循环,它根本就只会运行一次,为什么不去掉外面的do{..}while结构呢?原来这也是非常巧妙的技巧。在工程中可能经常会引起麻烦,而上面的定义能够保证这些麻烦不会出现。下面是解释:假设有这样一个宏定义#define macro(condition) \i转载 2013-08-17 21:38:21 · 720 阅读 · 0 评论 -
单例模式——C++实现自动释放单例类的实例
C++编程语言是一个应用广泛的计算机应用语言,它功能强大,在一定程度上大大提高了程 序开发效率。C++单例模式也称为单件模式、单子模式。使用单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共 享。有很多地方需要这样的功能模块,如系统的日志输出等。单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到这一点,但这样的代码显得很不优雅。定义一个转载 2013-08-30 09:09:10 · 764 阅读 · 0 评论 -
C++中的临时对象都是const类型
先看代码: 1 #include 2 using namespace std; 3 4 class A {}; 5 6 class B 7 { 8 public: 9 B(){}10 B(A& a){}11 };12 13 class B1: public B14 {15 public:16 B1(const转载 2013-09-06 17:09:53 · 614 阅读 · 0 评论 -
数组分割
一、题目概述:有一个没有排序,元素个数为2N的正整数数组。要求把它分割为元素个数为N的两个数组,并使两个子数组的和最接近。假设数组A[1..2N]所有元素的和是SUM。模仿动态规划解0-1背包问题的策略,令S(k, i)表示前k个元素中任意i个元素的和的集合。显然:S(k, 1) = {A[i] | 1S(k, k) = {A[1]+A[2]+…+A[k]}S(k, i) = S(转载 2013-09-08 19:24:04 · 617 阅读 · 0 评论 -
C++中的虚函数的作用
纯虚函数主要是你不知道这个函数如何定义,即你无法为其写出定义部分,这部分只有在子类中才能够正确表达,比如,我们要定义一个动物类,那它的呼吸方法怎么定义呢,是像鱼那样,还是像人那样,这个没法确定,只能在子类中去定义。而虚函数则是肯定知道这个函数的定义,并且大部分子类对这方法的定义应该是差不多的,比如我们要定义一个树类,树都可以进行光合作用,大部分树其进行光合作用的方法都差不多吧,我们就可以将这个转载 2013-09-04 17:43:43 · 689 阅读 · 0 评论 -
priority_queue的用法
priority_queue调用 STL里面的 make_heap(), pop_heap(), push_heap() 算法实现,也算是堆的另外一种形式。先写一个用 STL 里面堆算法实现的与真正的STL里面的 priority_queue用法相似的priority_queue, 以加深对 priority_queue 的理解?#include转载 2013-08-22 11:00:56 · 571 阅读 · 0 评论 -
小数精确相乘
#include #include using namespace std;void PrintMulNum(char *numA,int alen,char *numB,int blen){ if (NULL == numA || NULL == numB || alen <=0 || blen <=0) { return; } int *num1 = new int[al原创 2013-09-05 01:14:14 · 701 阅读 · 0 评论 -
test.
//寻找数组中的最小值和最大值.《编程之美》解法三,比较次数1.5Nvoid GetMaxMinNum(int array[], int length, int &minNum, int &maxNum){ if (NULL == array || length <= 0) { return; } int posStart; if (length & 0x1 !=0) {原创 2013-09-05 13:19:38 · 785 阅读 · 0 评论 -
hash_map和map
这里列几个常见问题,应该对你理解和使用hash_map比较有帮助。4.1 hash_map和map的区别在哪里?构造函数。hash_map需要hash函数,等于函数;map只需要比较函数(小于函数).存储结构。hash_map采用hash表存储,map一般采用红黑树(RB Tree)实现。因此其memory数据结构是不一样的。4.2 什么时候需要用hash_map,什么时候需要用m转载 2013-09-14 09:53:01 · 589 阅读 · 0 评论 -
线程安全 单例模式
class Sigleton{public: static Sigleton *GetInstance() { if (NULL == pInstance) { pthread_mutex_lock(&pMutex); if (NULL == pInstance) { pInstance = new Sigleton; } pthread_mu原创 2013-09-19 15:18:48 · 1159 阅读 · 0 评论 -
排序
//堆排序static void swap(int &a,int &b){ if (a!=b) { a=a^b; b=a^b; a=a^b; }}void siftdown(int array[],int i, int length){ int j; for (j = 2*i+1; j < length ;) { if (j+1<length && arra原创 2013-09-22 21:48:26 · 569 阅读 · 0 评论 -
static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较
隐式转换(implicit conversion)short a=2000;int b;b=a;short是两字节,int是四字节,由short型转成int型是宽化转换(bit位数增多),编译器没有warning,如下图所示。宽化转换(如char到int,int到long long,int到float,float到double,int到double等)构成隐式转换,转载 2013-08-17 21:26:32 · 527 阅读 · 0 评论 -
4.10 数字哑谜和回文
//21978 x 4 = 87912int main() { int m1, m2, m3, m4, m5; int n1, n2, n3, n4, n5; for (m1 = 0; m1 < 10; m1++) { for (m2 = 0; m2 < 10; m2++) { if (m原创 2013-08-28 16:05:59 · 746 阅读 · 0 评论 -
拷贝构造函数的参数类型必须是引用
在C++中, 构造函数,拷贝构造函数,析构函数和赋值函数(赋值运算符重载)是最基本不过的需要掌握的知识。 但是如果我问你“拷贝构造函数的参数为什么必须使用引用类型?”这个问题, 你会怎么回答? 或许你会回答为了减少一次内存拷贝? 很惭愧的是,我的第一感觉也是这么回答。不过还好,我思索一下以后,发现这个答案是不对的。原因: 如果拷贝构造函数中的参数不是一个引用,即形如CCla转载 2013-08-16 13:30:12 · 569 阅读 · 0 评论 -
字节序问题--大端法小端法
一、字节序定义字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了)。其实大部分人在实际的开发中都很少会直接和字节序打交道。唯有在跨平台以及网络程序中字节序才是一个应该被考虑的问题。在所有的介绍字节序的文章中都会提到字节序分为两类:Big-Endian和Little-Endian。引用标准的Big-End转载 2013-08-23 00:30:46 · 1381 阅读 · 0 评论 -
打印矩阵
51 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9请按任意键继续. . .打印如上原创 2013-08-23 16:39:43 · 565 阅读 · 0 评论 -
c,c++各自特点
c是一种结构化语言,重点在于算法和数据结构。c程序的设计首先考虑的是如何通过一个过程,对输入进行运算处理得到输出。c++首先考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样可以通过获取对象的状态信息得到输出或实现过程控制。原创 2013-08-23 09:35:22 · 868 阅读 · 0 评论 -
在子类中调用父类的带参数的构造函数
animal类的构造函数,增加两个参数height和weight,分别表示动物的高度和重量。代码如例2-13所示。 例2-13双击代码全选12345678910111213141516171819转载 2013-08-24 11:37:49 · 3282 阅读 · 0 评论 -
约瑟夫环 <list>
#include #include using namespace std;int Josephus(int n, int k, int m){ list ilist; int pos = 1; for (;pos <= n; pos ++) { ilist.push_back(pos); } list::iterator itor = ilist.begin(原创 2013-08-24 16:31:43 · 1231 阅读 · 0 评论 -
STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)(转)
向量(vector) 连续存储的元素Vectorc;c.back() 传回最后一个数据,不检查这个数据是否存在。c.clear() 移除容器中所有数据。c.empty() 判断容器是否为空。c.front() 传回地一个数据。c.pop_back() 删除最后一个数据。c.push_back(elem) 在转载 2013-08-24 18:59:07 · 626 阅读 · 0 评论 -
继承小结
公有继承public私有继承private保护继承protected1.继承后,基类成员对派生类对象的可见性:public继承:对派生类对象来说,基类的公有成员是可见的,其他成员不可见。private继承:对派生类对象来说,基类所有成员不可见。protected继承:对派生类对象来说,基类所有成员不可见。2.继承后,基类成员对派生类的可见性:pu原创 2013-08-24 10:04:34 · 665 阅读 · 0 评论 -
最长重复子串,后缀树
#includeusing namespace std;int compare(const void *arg1, const void *arg2){ return strcmp(*(char **)arg1,*(char **)arg2);}int CommonLen( char *str1, char *str2){ int i = 0; while (*str1 &原创 2013-08-25 10:32:48 · 1386 阅读 · 0 评论 -
求一个字符串中连续出现次数最多的子串
#include #include #include #include using namespace std; map fun(const string &str) { vector substrs; int maxcount = 1, count = 1; string substr; int i, len = str.length转载 2013-08-25 11:17:06 · 837 阅读 · 0 评论 -
单链表的快速排序
单链表的特点是:单向。设头结点位head,则最后一个节点的next指向NULL。如果只知道头结点head,请问怎么将该链表排序? 设结点结构为[cpp] view plaincopystruct Node{ int key; Node* next; };转载 2013-08-26 23:21:30 · 32015 阅读 · 10 评论 -
二叉树非递归,前中后序遍历
typedef struct node { char data; node *lchild; node *rchild;}*BinaryTree;void PreorderTraverseTree(BinaryTree root){ if (NULL == root) { return; } stack chStack; chStack.push(r原创 2013-08-27 17:47:09 · 686 阅读 · 0 评论 -
统计字符数
#include #include using namespace std;typedef struct node *nodeptr;typedef struct node{ char *word; int count; nodeptr next;}node;#define NHASH 29989#define MULT 31nodeptr bin[NHASH];原创 2013-09-29 10:10:11 · 762 阅读 · 0 评论