- 博客(32)
- 资源 (1)
- 收藏
- 关注
原创 C++派生继承访问权限
当一个子类从父类继承时,父类的所有成员成为子类的成员,此时对父类成员的访问状态由继承时使用的继承限定符决定。1.如果子类从父类继承时使用的继承限定符是public,那么(1)父类的public成员成为子类的public成员,允许类以外的代码访问这些成员;(2)父类的private成员仍旧是父类的private成员,子类成员不可以访问这些成员;(3)父类的protected成员成为子
2014-08-15 20:41:22
642
原创 <细节>写个简单的函数,用于判断CPU的字节序(little endian/big endian)
这个题目是PPS2013校园招聘的一个笔试题目,
2014-08-14 17:13:42
2079
转载 CPU的字节序——大端小端模式详解
1. 什么是大端,什么是小端:所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。2.为什么会有大小端:为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的cha
2014-08-14 17:03:35
2540
2
转载 多线程环境下对变量的读写操作的原子性问题(一道百度笔试题引发的思考)
以下多线程对int型变量x的操作,哪几个需要进行同步:( )A. x=y; B. x++; C. ++x; D. x=1;从表面看上去实在是看不出什么突破口,我们不妨将这些代码译成汇编语言再来分析。 01 x = y; 02 mov eax,dword ptr [y] 03 mov dword ptr [x],eax 04 05 x+
2014-08-11 14:53:04
726
转载 TCP拥塞控制算法
为了防止网络的拥塞现象,TCP提出了一系列的拥塞控制机制。最初由V. Jacobson在1988年的论文中提出的TCP的拥塞控制由“慢启动(Slow start)”和“拥塞避免(Congestion avoidance)”组成,后来TCP Reno版本中又针对性的加入了“快速重传(Fast retransmit)”、“快速恢复(Fast Recovery)”算法,再后来在TCP NewReno中又
2014-08-07 10:37:26
1683
转载 关 于 PV 操 作
在计算机操作系统中,PV操作是进程管理中的难点。首先应弄清PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下: P(S):①将信号量S的值减1,即S=S-1; ②如果S³0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。 V(S):①将信号量S的值加1,即S=S+1;
2014-08-05 10:10:43
2410
原创 关于虚函数
虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型。以实现统一的接口,不同定义过程。如果在派生类中没有对虚函数重新定义,则它继承其基类的虚函数。
2014-07-02 19:20:46
896
转载 虚函数和纯虚函数
1、基本形式:virtual ReturnType Function_1(); //虚函数声明virtual ReturnType Function_2() = 0; //纯虚函数声明先讲示例吧,再总结结论。2、示例:class Animail{public: void Function_1() {cout };class
2014-07-02 15:43:36
494
转载 堆和栈的区别
堆和栈的区别 一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵
2014-07-01 20:46:50
447
原创 <实例>消除内嵌括号——使用栈实现
题目:给定一个如下格式的字符串(1,(2,3),(4,(5,6),7))括号内的元素可以是数字,也可以是另一个括号,请实现一个算法消除嵌套的括号,比如把上面的表达式变成:(1,2,3,4,5,6,7),如果表达式有误请报错。
2014-06-24 10:05:58
652
原创 <细节>动态创建二维数组
今天在做一个关于数组相似度的题目,需要动态创建二维数组,刚开始想用常规的int a[ ][ ]建立,但很快就发现行不通,这种常规数组必须在编译前指定数组的维数,而这个题目在的维数必须在运行中计算得出,于是想到采用new来建立动态二维数组,这个方法行得通,但是很麻烦,也不太利于理解,后面决定采用vector >方法来创建,简单了不少,下面对两种方法都进行一下总结。
2014-06-23 16:46:32
634
原创 <实例>C++ 将一句话里的单词进行倒置,标点符号不倒换——使用string库实现
#include #include using namespace std;string reverse(string sentence){ string::iterator begin = sentence.begin(); string::iterator end = sentence.end(); char tmp; while( begin < end ) { tm
2014-06-17 11:10:29
1105
1
转载 算法3:最常用的排序——快速排序
上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到了O(N2)。假如我们的计算机每秒钟可以运行10亿次,那么对1亿个数进行排序,桶排序则只需要0.1秒,而冒泡排序则需要1千万秒,达到115天之久,是不是很吓人。那有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。
2014-06-05 14:58:34
1397
转载 白话经典算法系列之五 归并排序的实现(改)
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。[cpp] view plaincopy
2014-06-04 16:12:11
594
转载 白话经典算法系列之七 堆与堆排序(改)
二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆。下图展示一个最小堆:
2014-06-04 10:20:51
654
转载 白话经典算法之直接排序(改)
直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接播放排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后。 设数组为a[0…n-1]。1. 初始时,数组全为无序区为a[0..n-1]。令i=02. 在无序区a[i…n-1]中选取一个最小的元素,将其
2014-06-03 17:11:01
605
原创 求最大公约数问题----辗转相除法
#include using namespace std;int gcd( int m, int n ) { if( m<n ) { int temp = m; m = n; n = temp; } if( m%n == 0 ) { return n; } else { return gcd( n,m%n ); }}int main(){
2014-05-29 15:48:21
666
原创 <细节>c++中关于++和*的优先级
#include using namespace std;int main(){ int a,b,c,d; a = 10; b = 10*++a; //先++a,再* c = 10*a++; //a=11,应该为110 cout<<"b:"<<b<<endl; cout<<"c:"<<c<<endl; return 0;}
2014-05-28 14:59:30
1645
转载 类的sizeof
文字是转载的,图是原创的。1、空类的sizeof是1。空类是指没有成员的类,类中的函数不占空间,除非是虚函数。[cpp] view plaincopyclass A { public: A(){} ~A(){} void fun(){} };
2014-05-27 21:02:27
448
原创 <细节>C++函数形参表调用顺序
#include using namespace std;void print(int i, int j){ cout<<i<<endl; cout<<j<<endl;}void main(){ int i=0; print(i,i++);}观察上述代码,常规
2014-05-27 20:25:09
901
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人