C/C++
文章平均质量分 71
wzb56
never say die! never ever give up!
人活着,你也让别人活!
前半生不犹豫,后半生不后悔!
改变一生的无外乎两种东西:一是你读过的书,一是你遇到的人。
改变命运的无外乎两种东西:一是你读过的书,一是你遇到的人。
展开
-
C++类中静态成员的初始化
静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域操作符来指出静态成员所属的类.但如果静态成员是整型或是枚举型const,则可以在类声明中初始化!!!程序举例:MyString.h#ifndef MyString_H#define MyString_Hclass MyString{public: MyString(void); ~M原创 2012-08-31 12:37:39 · 953 阅读 · 0 评论 -
常见排序算法总结
排序(sorting)排序(Sorting)第一类:内部与外部排序第二类:稳定与不稳定排序法第三类:简单与高等排序法常见之排序算法冒泡排序(Bubble sorting)选择排序(Selection sorting)插入排序(Insertion sorting)快速排序(Quick sorting)堆排序(Heap sorting)希尔排转载 2012-10-15 23:23:50 · 876 阅读 · 0 评论 -
选择排序:selectSort
选择排序:选择排序其实是以一种缩减问题规模的方法,将数组排序的算法 1. 对于数组a[0...n-1] 中的元素,通过比较,选出数组中最小元素的下标k, 将a[k] 和a[0] 交换,确定a[0],; 2. 同理,剩余的n-1一个元素a[1...n-1],仍然可以通过1的方法,确定a[1]. 3.原创 2012-09-24 19:59:07 · 748 阅读 · 0 评论 -
技巧:用 C 语言实现程序的多态性: C中只有两种类型int 和void *, 万能指针void *
技巧:用 C 语言实现程序的多态性王 广, 硕士研究生, 中国科学技术大学简介: 使用面向对象的语言可以实现多态,并且在很大程度上降低了代码的复杂性。对于面向过程的 C 语言同样可以实现多态,本文将着重介绍 C 语言是如何实现多态的。发布日期: 2010 年 8 月 17 日 级别: 初级 访问情况 : 8880 次浏览 评论:转载 2012-10-16 21:59:16 · 1696 阅读 · 1 评论 -
C语言实现封装、继承和多态
作者:Dong | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址:http://dongxicheng.org/cpp/ooc/1、 概述C语言是一种面向过程的程序设计语言,而C++是在C语言基础上衍生来了的面向对象的语言,实际上,很多C++实现的底层是用C语言实现的,如在Visual C++中的Interface其实就是struct,查找Int转载 2012-10-17 00:01:50 · 1078 阅读 · 0 评论 -
面向对象的设计原则
对于面向对象软件系统的设计而言,在支持可维护性的同时,提高系统的可复用性是一个至关重要的问题,如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一。在面向对象设计中,可维护性的复用是以设计原则为基础的。每一个原则都蕴含一些面向对象设计的思想,可以从不同的角度提升一个软件结构的设计水平。 面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模转载 2012-10-17 14:44:25 · 647 阅读 · 0 评论 -
函数调用约定和堆栈
函数调用约定和堆栈1 什么是堆栈编译器一般使用堆栈实现函数调用。堆栈是存储器的一个区域,嵌入式环境有时需要程序员自己定义一个数组作为堆栈。Windows为每个线程自动维护一个堆栈,堆栈的大小可以设置。编译器使用堆栈来堆放每个函数的参数、局部变量等信息。函数调用经常是嵌套的,在同一时刻,堆栈中会有多个函数的信息,每个函数占用一个连续的区域。一个函数占用的区域被称作帧(frame)转载 2012-10-18 23:21:53 · 764 阅读 · 0 评论 -
统计一个整数n的二进制表示中1的个数的几种解法
统计一个整数n的二进制表示中1的个数;分析:此题有多种解法.1. 除2取余法:求一个整数的二进制的表示是,用的方法是除2取余。对于本题,只是统计一下余数为1的个数而已。2. 位模式法+移位:1的变种,用移位代除2,该方法更高效。用位模式,与1相与,取得一位。3. 模式位法: n = n& (n -1); 考虑 n 与 n -1的二进制表示,两者相&, n-1总能将n的最低位的1,原创 2012-10-29 18:37:56 · 2534 阅读 · 0 评论 -
写一个程序判断机器的的数据表示采用的是大端还是小端?
写一个程序判断机器的的数据表示采用的是大端还是小端?分析:大小端问题:计算机存储数据的最基本的单位是byte(字节,8bit)。c语言中,32位机的情形下: char 1byte; short 2bytes; int 4bytes;对于 short, int 这种多字节的原创 2012-10-31 20:05:37 · 1603 阅读 · 0 评论 -
用递归的方法求一个二叉树的深度。
用递归的方法求一个二叉树的深度。1. 空树的深度为0.2. 非空树的深度,为其左右子树中深度较大的子树的深度+1.代码实现:typedef struct node{ item_t item; struct node *left; struct node *right;} node_t;typedef node_t * Bi原创 2012-10-22 20:41:08 · 1215 阅读 · 0 评论 -
内核代码宏中 do{...}while(0) 的作用以及宏中#和##的作用及典型应用
在内核空间非常有限的情况下,为什么还要在某些宏里增加 do{...}while(0) 这种“没用”的代码行呢? 带参数的宏定义的一般形式为: #define () :一个标识符 :参数可以是一个或多个。多个参数之间用逗号分隔 :被替换用的字符串,字符串是由参数表中的各个参数组成的一个或转载 2012-10-24 08:42:02 · 1026 阅读 · 0 评论 -
在整数集合S中寻找最大数整数C, 使 C = A + B,并且 A,B, C,都是S中的元素
题目:在整数集合S中寻找最大数整数C, 使 C = A + B,并且 A,B, C,都是S中的元素;分析:将集合S中所有元素排序,生成一个有序的序列,利用偏序序列的传递性。贪心的优化策略。1.首选对S中元素排序,升序。2. C = s[k] (k = len -1, ..... 2) ;每次选最大的元素为C,对于每个C,选A为最小的元素, 选B为仅次于C的最大元素原创 2012-10-15 21:00:29 · 1166 阅读 · 0 评论 -
题目:求两个方阵A,B的乘积
题目:求两个方阵A,B的乘积方阵product;分析 product[i,j] 是A的第i行的元素与B的第j列的元素 逐个乘积作和。即:。代码实现:#include #include int *multiplyMatrixs(int *a, int *b, int *p, int n);void printMatrixArray(in原创 2012-10-15 19:58:52 · 4427 阅读 · 0 评论 -
两个有意思的计算机相关的智力题
1. 亮灯问题: 现有100盏灯,编号1到100。每盏灯都有一个开关,开始时,100盏灯全部关闭。 做如下操作: . 第1次,按下所有编号是1 的倍数的灯的开关; . 第2次,按下所有编号是 2 的倍数的灯的开关; . 第3次,按下所有编号是 3 的倍数的灯的开关; …………………… .原创 2012-09-09 12:58:53 · 1481 阅读 · 0 评论 -
奇怪的电子表
小Q有一块很旧的电子表,上面会显示当前的时间,如Y年M月D日h时m分s秒。小Q在2012年1月1日0时0分0秒的时候根据标准时间调整过表,但是也正因为这次调整,这块旧表出现了一些奇怪的电子故障:时钟、分钟和秒钟在显示20之后,将跳过21而直接显示22。也就是说秒钟从20跳转到22只需要1秒,分钟从20跳转到22只需要59秒(因为秒钟从20到22只用1秒),时钟依此类推。小Q只有这一块电子表,所以他原创 2012-09-09 11:04:44 · 1057 阅读 · 0 评论 -
你能写个真正小于n的随机数吗?
一个小于n的随机数, 即所有的在[0, n) 之间的数出现的概率是相同的。平时,我写一个小于n的随机数总是:r = rand() % n; 这样产生的数,是个真正的随机数吗?关键一点是c程序中能够产生的伪随机数的个数是有限个,因为系统中会这样一个常量:RAND_MAX ,也是c库能够产生伪随机数的最大数目。如果我们用一个连续生成的随机数列,其值都%2, 会发现其值是0, 1相间的。原创 2012-09-27 10:01:44 · 1586 阅读 · 0 评论 -
2012年奇虎360校园招聘实习生笔试编程题
2012年奇虎360校园招聘实习生笔试编程题1. 自己实现库函数 int atoi(const char* str); 注意两点:(1). 字符串中,符号位的处理。 (2).字符串中,出现非数字字符。(3). 进制考虑(如八进制只以0开头,十六进制以0x或者0X开头) 实现原理: 霍纳规则(Horno原创 2012-04-14 09:17:35 · 3290 阅读 · 1 评论 -
几个别人的面试题
实说,我觉得要有代码出现,思路固然非常重要,但是能快速写出正确的代码也很重要。因为我面试的时候,就有这些要求。1)一个数组,长度为N,为循环有序的。找出其中的最小值所谓循环有序就是 [ 4 5 6 1 2 3] 这种,1是我们要找的。时间复杂度你们肯定比我清楚。写出代码顺序遍历一遍o(n);使用折半查找 o(lgn); 2)两个数组,长度分别为N,都有序,原创 2012-09-13 23:45:55 · 720 阅读 · 0 评论 -
C++中类对象的初始化与赋值的区别
C++中类对象的初始化与赋值的区别C++中对象的初始化与赋值操作符是有区别。这一点在在理解,拷贝构造函数与赋值操作符的实现上是很重要的。在C++ (C)变量的使用原则,总是先定义后使用。而基本类型的变量的初始化和赋值几乎没有区别的。定义一个变量的过程:定义声明 初始化. (#之所以称之为定义声明,还有连接性性声明如extern 这种外部连接性的声明,是没有原创 2012-06-08 23:05:04 · 3198 阅读 · 0 评论 -
堆(heap)、堆排序(heapSort)、优先级队列
1. 堆数据结构: 堆是一种数据结构。分为大根堆和小根堆。 对堆数组,其分布与一个完全二叉树对应,其下标的几个关系: 当i的取值满足区间[1, n]时; 数组的小标从1开始; parent(i) = i >> 1; left(i) = 2*i; right(i) = 2*i +1;原创 2012-03-09 23:40:01 · 996 阅读 · 0 评论 -
多叉树后序转前序++
多叉树前序转后序返回比赛首页给定一颗多叉树,该多叉树可以用一个后序遍历的字符串表示为4(0),5(0),1(2),6(0),2(1),7(0),8(0),9(0),10(0),3(4),0(3)其中括号内的数字表示该节点的子节点数,比如0(3)表示节点0有3个子节点,而节点按照后序遍历的顺序排列。给定一个类似的多叉树后序遍历的字符串,试写原创 2012-09-18 21:03:18 · 1119 阅读 · 0 评论 -
数据结构栈stack的动态数组实现
stack:是一种的后进先出的线性数据结构,其操作一端是受限的,即只能从栈顶操作。通常,其实实现可以有动态数组实现,也可以由链表实现,似乎链表实现更合理。同过数组实现的栈的一个好处,可以是栈想数组那样随机的访问stack中的元素,而且通过预留量不用频繁的内存分配操作。本文,针对stack 实现一种用C语言实现的动态数组栈。栈的容积可以随栈中元素的个数,将其容量自动增减,本文实现原创 2012-09-24 21:00:12 · 1022 阅读 · 0 评论 -
数据结构队列之环形队列的动态数组实现:queue
queue: 也是一种线性的数据结构,其操作一般来讲也是受限的,典型特征是(First in, First out, FIFO)先进先出; 进入队列的元素总是在队列的tail入队,离开队列的元素总是从队列的head离开。其实实现有多种方式:1. 用链表实现,head指针指向queue的head, tail指针指向queue的tail;原创 2012-09-25 09:22:12 · 2198 阅读 · 0 评论 -
C语言中,int的最大值与最小值:
1. 有符号数: 分析:计算机中有符号整数是用补码表示的。 对于有符号的n位二进制数的其取值范围为:最小值:-2^(n-1); 最大值:2^(n-1) -1;2.无符号数:对于无符号的n位二进制数的其取值范围为: 最小值:0; //(所有的位全0) 最大值:2^n - 1; //所有的位全为1;原创 2012-10-24 15:48:59 · 21617 阅读 · 0 评论 -
用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回。
用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回。分析: 可以通过交换首尾字符,实现字符串的反转,即就地反转。代码实现:void revert(char *str) { assert(NULL != str); if( NULL == str) return ; char *head = str;原创 2012-10-22 20:31:50 · 1702 阅读 · 0 评论 -
C++中的置换实现全排列,参照标准模板库中置换
#include #include #include #include using namespace std;void swap(int *a, int *b);void reverse(int *begin, int *end);void printRange(int *begin, int *end);bool int_next_permutation(int *原创 2013-04-08 20:59:58 · 1082 阅读 · 0 评论 -
C++中<< 运算符的计算顺序
#include using namespace std;template void swap(T &a, T &b) { T temp(a); a = b; b = temp;}template T add(const T &a, const T &b) { return a + b;}int main(){ cout << "原创 2013-04-08 21:25:36 · 1335 阅读 · 0 评论 -
一个典型的内存泄露程序
好像能将Linux卡死,windows却毫无压力。#include #include #define UNIT 1024*1024 int main(int argc, char * argv[] ) { int i; int j; int k; int * ptr;while(1) { for(i=0; i<1024; i原创 2013-04-08 21:35:34 · 1012 阅读 · 0 评论 -
c++中的const
#include #include using namespace std;const int size = 100;int main(){ // size = 10; //error: assignment of read-only variable 'size' // int *ptr_size = &size; //error: invalid conversion原创 2013-04-08 21:40:13 · 963 阅读 · 0 评论 -
getopt的用法
使用 getopt() 进行命令行处理轻松处理复杂命令行Chris Herborth, 技术作家兼软件开发人员, 作家简介: 所有 UNIX® 程序甚至那些具有图形用户界面(graphical user interface,GUI)的程序,都能接受和处理命令行选项。对于某些程序,这是与其他程序或用户进行交互的主要手段。具有可靠的复杂命令行参数处理机制,会转载 2013-09-24 14:41:28 · 1150 阅读 · 0 评论 -
C语言中typeof
语言中的typeof关键字xiaoee posted @ 2010年10月19日 11:04 in Coding My Mind with tags C语言 , 12956 阅读typeof关键字是C语言中的一个新扩展。typeof的参数可以是两种形式:表达式或类型。下面是使用表达式的的例子: typeof(x[0](1)这里假设x是一个函数指针数组,转载 2013-09-25 17:21:43 · 896 阅读 · 0 评论 -
struct 成员的对齐方式
//用一个宏定义FIND求结构体struct s中某个成员变量member相对struct s的偏移量.//思考:若struct s的地址为0,则其成员member的地址就是其相对于s的偏移量//扩展: sizeof(struct s) 不一定等于 sizeof(struct s中的每一个成员)的和// 结构体大小不仅由成员的大小决定(sizeof(member)),而且还要原创 2012-06-26 23:11:01 · 1363 阅读 · 1 评论 -
Linux 中的setlocale
C 和 C++ 的标准库分别有自己的 locale 操作方法,C 标准库的 locale 设定函数是 setlocale(),而 C++ 标准库有 locale 类和流对象的 imbue() 方法。这篇是我自己的 setlocale() 使用总结。Linux的glibc中的setlocale()具体参考:man 3 setlocale头文件与声明如下:转载 2014-01-06 20:16:59 · 2783 阅读 · 0 评论 -
GNU c的__attribute__ 机制
GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribu转载 2014-02-10 09:57:41 · 766 阅读 · 0 评论 -
brk和sbrk及内存分配函数相关
brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的: 每个进程可访问的虚拟内存空间为3G,但在程序编译时,不可能也没必要为程序分配这么大的空间,只分配并不大的数据段空间,程序中动态分配的空间就是从这 一块分配的。如果这块空间不够,malloc函数族(realloc,calloc等)就调用sbrk函数将数据段的下界移动,sbrk函数在内核的管理 下将转载 2014-11-24 14:11:24 · 681 阅读 · 0 评论 -
c++中class与struct的区别
C++中:1.class中成员的默认访问权限是private,struct中的成员的默认访问权限是public。2. class的默认继承方式是private, struct 的默认继承方式是public。#include using namespace std;struct A { int a;};struct B : A { //等价于 struct B :原创 2013-04-08 20:24:20 · 954 阅读 · 0 评论 -
c++中的placement new
#include using namespace std;struct base { int i; virtual void f(){ cout << "in base calss" << endl; }};struct derived : base { int j; void f() { cout << "in原创 2013-04-08 22:06:55 · 950 阅读 · 0 评论 -
实习生面试总结
很久以前,写的面试总结。1. 你知道什么是系统平台开发? (面试的是系统平台开发工程师)系统平台就是提供基础服务的平台。(比如现在的云平台等,)(回答这个的时候,有点二,说就是做系统平台相关的开发。)2. 你的网站是用什么做的?你的web服务器使用的是?你用的php的版本? html + css+js. (实验室网站) php. (精原创 2012-10-28 09:18:45 · 1336 阅读 · 0 评论 -
类设计的几点认识及设计一个自己的类String类
感觉现在的面试都很有意思,上来就问你C++中虚函数表 ,你了解吗,是怎么实现的?对最基本的类设计从来不问。甚至问你用C实现C++的多态。其实,能否设计一个基本类,能体现对C++的类设计的掌握情况。(今年,中兴,和东软的笔试题中好像都有设计类的题, 但是也不能防止某些人背过)。个人认为,一个好的类设计,应该是使类类型像我们熟知的基本类型一样使用,即使类像基本类型一样使用。原创 2012-11-11 17:54:11 · 1101 阅读 · 0 评论 -
Data alignment: Straighten up and fly right
Data alignment: Straighten up and fly rightAlign your data for speed and correctnessJonathan Rentzsch (jon.dw@redshed.net), President, Red Shed SoftwareSummary: Data alignment i转载 2012-11-12 13:40:04 · 1462 阅读 · 0 评论