自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(197)
  • 收藏
  • 关注

原创 链表是否带环/求环的长度/求环的入口点

#include<iostream>#include<assert.h>using namespace std;struct Node{ int data; Node* next; Node(const int x) :data(x) ,next(NULL) {}};----------**************************

2017-07-16 01:23:37 375

原创 C语言中volatile关键字的作用

本文转自:http://blog.csdn.net/chuckfql/article/details/7445476 作者:chuckfql一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执

2017-07-15 18:54:57 210

原创 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字

//2.【附加题】--实现1+2+3...+n;//要求不能使用乘除法、for、while、if、else、switch、case 等关键字;//(这个题有多种解法,大家可以尽量去思考,这个题最优的解法时间复杂度是O(1),大家可以去尝试实现) #include<iostream>using namespace std;----------//方法一:使用条件判断语句(三目运算符 ?:)

2017-07-15 16:08:24 1267

原创 【冒泡排序】

一、简介 冒泡排序时交换排序的一种; 它的总体思想是:从数列的第一个数开始,将数列的数字两两比较,使得大数在前,直到倒数第二个数和倒数第一个数作比较,然后使得大数在前;那么这一趟比较下来,就会把数列中最大的数冒泡到数列的最后面;下一趟冒泡只需要冒泡到倒数第二个,依次类推,直到某趟冒泡的元素剩下一个;冒泡完毕,排序完成 (1)普通写法 假设一个数组中有sz个元素,每趟冒泡会把1个元素放在正确的

2017-07-14 22:21:02 283

原创 单链表排序问题(冒泡/快排【前后指针法】)

#include<iostream>#include<assert.h>using namespace std;typedef struct Node{ int data; struct Node* next; Node(int x) :data(x) ,next(NULL) {}}Node;----------//核心代码

2017-07-14 17:45:18 818

原创 不使用加减乘除计算数字相加问题

1.实现一个Add函数,让两个数相加,但是不能使用+、-、*、/等四则运算符。ps:也不能用++、–等等 #include<iostream>using namespace std;int Add(int a,int b){ //递归返回条件 if (a==0) return b; if (b==0) return a; int

2017-07-14 15:19:59 598

原创 合并两个有序链表/链表反转(逆置)/找链表倒数第k点(遍历一次)

//1.【基础题】--合并两个有序链表,合并以后的链表依旧有序。 #include<iostream>using namespace std;typedef struct Node{ int data; struct Node* next; Node(int x) :data(x) ,next(NULL) {}}Node;No

2017-07-14 02:50:26 310

原创 string传统/现代写法

//传统写法#include<iostream>#include<cstring>using namespace std;class String{public: String(const char* str)//构造 :_str(new char[strlen(str)+1]) { cout<<"构造"<<endl; s

2017-07-14 00:56:27 615

原创 【选择排序】和【堆排序】

一、选择排序(1)选择排序的算法思路(假设升序) 每次从待排序的区间中找到一个最小数,然后将这个最小数和该区间的第一个数交换数值;然后缩小区间,继续这样的的方法,最终到该待排区间为一个数时停止,排序完成;总体算法分三步完成:选数据—>将所选数据放入合适位置—>缩小需要排序的范围(2)图说 (3)程序#include<iostream>#include<assert.h>using nam

2017-07-13 18:57:47 230

原创 【直接插入排序】和【希尔排序】

一、直接插入排序(1)算法步骤(升序)1>将待排序数组的第一个数拿出来看做一个已经排序好的有序区间;将后面的数列看做一个无序的待排序数列; 2>从有序数列的最后一个数开始和待排序数列的第一个数key比较(即有序数列的最后一个位置的下一个位置的数),如果有序数列的最后一个数大于key,则将有序数列的最后一个数填到key的位置;然后取有序数列的前一个数和key比较,大于key则填入后一个位置,继续取有

2017-07-13 16:23:45 461

原创 【快速排序】★★★★★

一、快速排序的简介快速排序是一种总体上来讲时间复杂度较低的排序,其主要利用了分冶的思想;在排序一大段数据时,每次通过选取key值,然后利用不同的方法将该段数据分为两段(小于等于key的一段在一边,大于key的一段在一边,key的数据在这两段的中间);然后通过递归的方法分别对上述的左右两段数据采用同样的思想分段;快速排序每一趟下来,位于两段中间的key值就会被置于最终排序时该数据的正确位置,就是说快速

2017-07-12 02:33:04 3169 1

原创 模板实现动态顺序表(含容量检测函数的详细讲解)

一、模板实现动态顺序表 (1)要实现的成员函数和成员变量template<typename T>class SeqList{public: SeqList();//构造 SeqList(const T& seqlist);//拷贝构造 SeqList& operator=(const T& seqlist);//赋值运算符重载 ~SeqList();//析构

2017-07-11 01:30:10 442 1

原创 几个链表面试体(从尾逆序打印,删除某个位置,赋值复杂链表)

一、程序#include<iostream>#include<stack>using namespace std;typedef struct Node{ int data;; Node* next; Node(int x) :data(x) ,next(NULL) {}}Node;typedef struct Complex

2017-07-10 21:16:07 256

原创 结构体内存大小的求法(内存对齐)&&c++类大小同样适用

一、内存对其的原因:1. 平台原因:不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取特定类型的数据,否则抛出异常; 2. 性能问题:数据结构(尤其是栈)应该尽可能的在自然边界上对齐;员应在于,为了访问没有对齐的内存数据。处理器需要作两次内存访问;而对于对齐的内存处理器只需访问一次内存,就可以获得正确的数据; (以空间换区时间)二、结构体内存对齐规则:结构体的

2017-07-09 22:45:44 354

原创 定义一个只能在堆上生成对象的类&&定义一个只能在栈上生成对象的类&&定义一个类不能被继承

1.定义一个类不能被继承子类在继承父类的成员函数和成员变量之后,在子类的构造函数之前会先调用父类的构造函数,先初始化父类的成员变量,然后在子类的构造函数中初始化子类的成员变量; 所以一个类不能被继承,表示其子类在实例化对象时不成功,即不能调用父类的构造函数;那么将父类的构造函数的访问属性设置成为私有,这样一来,不论采用任何继承关系,父类的私有成员在子类中都不可见;即父类的构造函数在子类的构造函数之

2017-07-07 15:35:52 501

原创 类的静态成员

关于类的静态成员,我们需要知道以下几点: 类里面static修饰的成员,成为静态类成员。 类的静态成员是该类型的所有对象对象所共享。 (1)类的静态成员是属于类而不属于对象,所以他不是类的单个对象所有。(2)静态成员只存在一个,不像普通的成员,每创建一个对象,就会创建一组普通的成员。(3)静态成员变量的初始化不能在类中,肯定是不能在构造函数中,只能在类外并且在main函数之前,按照这样的

2017-06-28 00:20:30 675

原创 mysleep 的两种实现

一、#include<stdio.h> #include<signal.h> #include<unistd.h> void myhandler(int sig) //句柄函数什么也不做{} int mysleep(int timeout) { struct sigaction act,oact; act.sa_handler = myhandler;

2017-06-18 16:25:58 432

原创 守护进程

一、什么是守护进程?守护进程也称精灵进程(Daemon),是运⾏在后台的⼀种特殊进程。它独⽴于控制终端并且周期性地执⾏某种任务或等待处理某些发⽣的事件。守护进程是⼀种很有⽤的进程。 Linux的⼤多数服务器就是⽤守护进程实现的。⽐如, Internet服务器inetd, Web服务器httpd等。同时,守护进程完成许多系统任务。⽐如,作业规划进程crond等 Linux系统启动时会启动很多系统服

2017-06-18 16:05:53 306

原创 线程基本概念和线程控制

一、线程的基本概念:线程也被称为轻量进程,线程是运行中的程序的最小调度单位。 线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。二、linux下线程的特点线程不拥有系统资源,只能运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的资源。线程可以创建和撤消,从而实现程序的并发执行。一般,线程具有就绪、阻塞和运行三种基本状态。 在多中央处理器的系统里,不同线程可

2017-06-18 14:14:18 487

原创 对用父类指针(或引用)指向父类对象和子类对象时,从而用父类指针或者引用访问成员时的深刻理解;

赋值兼容规则永远不变,父类指针既可以指向父类对象,也可以指向子类对象;当父类指针指向父类对象时,访问父类的成员;当父类指针指向子类对象时,那么只能访问子类中从父类继承下来的那部分成员;不能访问子类独有的成员,如果访问,编译阶段会报错;函数隐藏(将父类的成员隐藏,通过子类对象或者在子类内部只能访问子类的同名成员;但是父类的成员仍然存在),是指当子类中有和父类同名的成员变量时,此时子类中有两个名字相同的

2017-06-17 14:40:33 7255 1

原创 探索c++对象模型

一、探索虚函数表虚函数表是通过一块连续内存来存储虚函数的地址。这张表解决了继承、虚函数(重写)的问题。在含有虚函数的类的对象实例中都存在一张虚函数表,编译器都会维护这张虚表,对象的前四个字节就是指向虚表的指针,虚函数表就像一张地图,指明了实际应该调用的虚函数。虚表是所有类对象实例共用的(1)在不含虚函数的类的对象实例中一定不含虚函数表指针#include<iostream>using namesp

2017-06-15 17:13:24 496

原创 虚函数

一、虚函数:(1)虚函数的概念:类的成员函数前面加virtual关键字,则这个成员函数称为虚函数。 (2)virtual关键字使用的域 :virtua 只在类体内使用;就是说: 如果在类外定义虚函数,那么只能在类内声明函数时加virtual,类外定义函数时不能加virtual。(3)那些函数可以定义为虚函数:只有类的成员函数才能定义为虚函数。 注意:*静态成员函数不能定义为虚函数(不含this指

2017-06-14 23:50:15 533

原创 【c++三大特性之一】---多态及其实现原理

一、多态的总体认识:多态就是多种形态,C++的多态分为静态多态和动态多态。 (1) 静态多态:就是重载,因为是在编译期决议确定,所以称为静态多态。 http://blog.csdn.net/gogogo_sky/article/details/72807123(2) 动态多态:就是通过继承重写基类的虚函数实现的多态,因为是在运行时决议确定,所以称为动态多态。本篇文章主讲动态多态

2017-06-14 21:15:24 332

原创 【信号】---关于SIGCHLD信号

一、 下面证明验证子进程退出时会给父进程发送SIGCHLD信号(17号信号)的机制测试结果: 三、父进程等待子进程的异步版本(非阻塞版本)测试:

2017-06-11 16:16:27 499

原创 IPC实现机制(四)---信号量(sem)

前言:学习信号量之前先弄清两个概念:什么是临界资源,什么是临界区 (1)临界资源:一次仅允许一个进程使用的共享资源。 (2)临界区:每个进程中访问临界资源的那段程序称为临界区一、什么是信号量信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信的;它本身是一种外部资源的标识;信号量在这个过程中负责数据操作的互斥和同步功能;二、为

2017-06-10 02:45:28 543

原创 IPC实现机制(二)---命名管道(FIFO)

一、FIFO的概念: 匿名管道(pipe)的⼀个不⾜之处是没有名字,因此,只能⽤于具有亲缘关系的进程间通信; 因此,提出了命名管道;命名管道(FIFO) 提供⼀个路径名与之关联,以FIFO的⽂件形式存储于⽂件系统中。 命名管道是⼀个设备⽂件,因此,即使进程与创建FIFO的进程不存在亲缘关系,只要可以访问该路径,就能够通过FIFO相互通信。 值得注意的是, FIFO(first input f

2017-06-09 19:28:37 981

原创 c++三大概念要分清--重载,隐藏(重定义),覆盖(重写)

重载,隐藏(重定义),覆盖(重写)—这几个名词看着好像很像,不过其实一样都不一样!!综述:一、重载:(1) 概念:在同一个作用域内;函数名相同,参数列表不同(参数个数不同,或者参数类型不同,或者参数个数和参数类型都不同),返回值类型可相同也可不同;这种情况叫做c++的重载!注意:c语言没有函数重载的机制;详见:http://blog.csdn.net/gogogo_sky/article/deta

2017-06-05 20:22:30 10626 2

转载 谨慎使用输出重定向(>)

今天在使用重定向<的时候,不小心把一个空的文件重定向到刚写完的程序中,导致白写了;想在网上找挽回的措施,结果linux没有办法可以挽回;就看到这篇文章,分享出来!避免“悲剧重演” 转资51CTO:http://cuchadanfan.blog.51cto.com/9940284/1670308 一、问题描述 我们在进行文件操作时经常会用到覆盖输出重定向(>),追加输出重定向(>>),很

2017-06-03 20:49:04 485

原创 IPC实现机制(三)---消息队列

一、什么是消息队列 消息队列就是消息的链表,位于内核中。 消息队列中每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值。 消息队列是基于消息的,管道是基于字节流的, 且消息队列的读取不一定是先入先出。 消息队列却是随内核的,即使该进程消亡了该内核中的消息队列是不会主动消失的,除非使用ipcrm -q + msg_id删除该消息队列。二、消息队列的特征: 消息队列提供

2017-06-03 14:40:59 742

原创 继承(三)--友元与继承&&静态成员与继承

前言:对前面继承(一)文章与继承(二)文章的补充; 一、友元与继承1.友元分为友元函数和友元类;2.在类的继承关系中,友元关系不能继承;也就是说,父类的友元函数和友元类,不能通过继承以后访问子类的成员;(即:父亲的朋友不是儿子的朋友)如果真的需要父类的友元函数或者友元类访问子类的成员;那么可以在子类中,将该父类的友元函数或者友元类声明为自己的友元;这样就可以让父类的友元访问子类的成员;代码说明:#

2017-06-02 20:55:23 685

原创 继承(二)--菱形继承,虚拟虚拟继承

前言:在上一篇文章继承(一)当中,我们都是讨论单继承的情况; 即一个子类只有一个直接父类时称这个继承关系为单继承单继承的模型是继承里面最简单的: 这篇文章,我主要讨论多继承的情况;一、多继承的概念:一个子类有两个或者两个以上直接父类时,这种继承关系成为多继承; 二、在多继承的继承关系中,最典型的就是菱形继承(也叫钻石继承) 本篇文章主讲多继承中的菱形继承;(1)菱形继承的继承关系 (2)

2017-06-02 12:17:24 316

原创 继承(一)

一、c++的三大特性:封装,继承,多态 (1)封装的实现:通过访问限定符(private和protected)修饰类内成员,隐藏类内部的方法实现和数据; (在类外:通过类的对象进行访问,public成员可以在类外被访问,而private和protected成员不可以) (在类内:成员函数可以任意访问成员变量和其他成员函数,除了静态成员函数和静态成员变量) 二、本文主讲c++的继承特性;(1)

2017-06-01 12:43:59 316

原创 IPC实现机制(一)---pipe(匿名管道)

一.IPC简介: (1)概念: 每个进程各⾃有不同的⽤户地址空间,任何⼀个进程的全局变量在另⼀个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟⼀块缓冲区,进程1把数据从⽤户空间拷到内核缓 冲区,进程2再从内核缓冲区把数据读⾛,内核提供的这种机制称为进程间通信 (IPC,InterProcess Communication) (2)常用的进程间通信方式:传统的进程间

2017-05-31 00:49:23 2114 1

原创 c++函数重载机制实现原理

一、c++函数重载的定义:在同一作用域类,一组函数的函数名相同,参数列表不同(参数个数不同/参数类型不同),返回值可同可不同二、函数重载的作用:重载函数通常用来在同一个作用域内命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。三、函数重载是一种静态多态:(1)多态:用同一个东西表示不同的形态; (2)多态分为: 静态多态(编译时的多态) 动态

2017-05-30 00:48:58 9715 5

原创 Linux下IPC机制实现相关函数

一、因为linux下一切皆文件,所以先看linux下对文件I/O相关函数: 二、IPC管道机制相关函数: 三、IPC命名管道机制相关函数: 四、IPC消息队列机制相关函数:

2017-05-28 19:49:09 358

原创 c++实现单链表

一、用面向对象的思想,用c++语言实现单链表类(1)链表结点的定义typedef int DataType;struct ListNode{ ListNode(const DataType& x) :data(x) ,next(NULL) {} DataType data; ListNode* next;};(2)链表的成员变量

2017-05-28 13:36:06 1202

原创 c++模拟实现顺序表

一、用面向对象的思想模拟实现动态顺序表; 写一个顺序表类;该顺序表类的成员变量为:_sz记录顺序表实际储存的元素个数;_capacity记录顺序表的实际存储容量;_data为一个动态数组;储存元素; 二、该顺序表类的成员函数有 (1)类的默认成员数;SeqList()//构造SeqList(const SeqList& seqlist)//拷贝构造SeqList& operator=(Se

2017-05-26 21:40:19 413

原创 简单的string类的模拟实现

综述:c++标准库提供了一个字符串类型string ,该类型可以直接定义一个字符串对象,并且对字符串进行各种操作;以下是本人根据c++标准库中的string类,简单的模拟实现该类; 先看cpulspuls中string类的成员函数: 其中我只实现图中列出函数原型的几个成员函数: (1)实现之前先看看这写函数及其重载函数是什么意思: 测试代码

2017-05-25 13:18:50 534

转载 标准IO与文件IO 的区别

作者:王姗姗,华清远见嵌入式学院讲师。1.先来了解下什么是标准IO以及文件IO。标准IO:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的可移植性。标准IO库处理很多细节。例如缓存分配,以优化长度执行IO等。标准的IO提供了三种类型的缓存。(1)全缓存:当填满标准IO缓存后才进行实际的IO操作。 (2)行缓存:当输入或输出中遇到新行符时

2017-05-24 16:35:40 509

转载 从一个男人身上看出他的修养和抱负

从一个男人身上看出他的修养和抱负整天关注娱乐版的男人,你指望它有什么成就?整天玩游戏的男人、整体打麻将的男人,你指望它有什么成就么?不管喜不喜欢,这样的东西都是值得一读。 一、拥有自信和风度 男人到了二十几岁后,就要开始学着用心去经营自己了,它体现在自己的思想与涵养上。自信是一个男人最重要的品质,自信的男人就你像一只在暴风雨中战斗的海鸥。海鸥所要说的只有一句话“让暴风雨来的再猛烈些吧”,只因为

2017-05-22 00:48:57 634

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除