自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(278)
  • 收藏
  • 关注

转载 Makefile基础 4. 自动处理头文件的依赖关系

转自:http://blog.csdn.net/weiwangchao_/article/details/18799309现在我们的Makefile写成这样:all: mainmain: main.o stack.o maze.o gcc $^ -o [email protected]: main.h stack.h maze.hstack.o: stack.h main.hmaze.o:

2017-02-17 15:06:45 559

转载 用g++编译生成动态连接库*.so的方法及连接

用g++编译生成动态连接库*.so的方法及连接1、动态库*.so的编译这里我们用到4个文件,它们分别为:SoDemoTest.h、one.cpp、two.cpp、three.cpp。它们的内容如下: SoDemoTest.h[cpp] view plain copy#ifndef __SO_DEMO_TEST_

2016-03-04 17:20:31 9726

转载 SecureCRT 遇到一个致命的错误且必须关闭——解决

转自:http://blog.csdn.net/lisheng19870305/article/details/45537759问题描述:1、以前安装过SecureCRT,现在出现问题,手工卸载不完全,导致新安装的SecureCRT一直提示:以下错误。2、出现的错误:3、解决方案:1)删除,上图路径中VanDyke文件夹内

2016-03-04 13:57:19 2984

转载 linux下发送邮件

系统管理人员经常会遇到对于设备或者任务的预警与通知,通常情况有发送短信、邮件等方式。发送短信一般来说需要有短信猫(硬件)或者调用libfetion给飞信用户发送。本文介绍几种简单的发送邮件的方式。本文环境:Ubuntu 10.04基础:      Linux服务器发送邮件一般都是基于sendmail进行的,sendmail服务器提供对外的邮件发送功能。其他工具都是基于sendmai

2015-12-29 10:28:21 649

转载 javac编译选项

1、类目录的绝对路径叫做class path。设置在系统变量CLASSPATH中。编译器和java虚拟机通过将package名字加到class path后来构造.class文件的路径。\classes是class path,package名字是com.apple.computers,而编译器和JVM会在 \classes\com\apple\compters中找.class文件。一

2015-12-03 22:37:27 3856

转载 classpath、path、JAVA_HOME的作用

CLASSPATH是什么?它的作用是什么?     它是javac编译器的一个环境变量。     它的作用与import、package关键字有关。     当你写下improt java.util.*时,编译器面对import关键字时,就知道你要引入java.util这个package中的类;但是编译器如何知道你把这个package放在哪里了呢?所以你首先得告诉编译器这个

2015-11-19 14:58:45 526

转载 Linux的SOCKET编程详解 .

转载自:http://blog.csdn.net/hguisu/article/details/7445768[+]Linux的SOCKET编程详解网络中进程之间如何通信什么是TCPIPUDPSocket是什么socket套接字套接字描述符文件描述符和文件指针的区别基本的SOCKET接口函数1socket函数2bind函数网络字节序与主机字节序3listenconn

2015-08-29 21:46:43 466

转载 Linux中ps配合Kill进程的N种方法

常规篇: 首先,用ps查看进程,方法如下:$ ps -ef……smx       1822     1  0 11:38 ?        00:00:49 gnome-terminalsmx       1823  1822  0 11:38 ?        00:00:00 gnome-pty-helpersmx       1824  1822  0 1

2015-08-29 21:37:02 467

转载 聚集索引与非聚集索引

转自:http://www.cnblogs.com/aspnethot/articles/1504082.html官方说法:聚集索引  一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序。   聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索

2015-08-07 21:31:26 454

转载 23种设计模式

目录创建型1. Factory Method(工厂方法)2. Abstract Factory(抽象工厂)3. Builder(建造者)4. Prototype(原型)5. Singleton(单例)结构型6. Adapter Class/Object(适配器)7. Bridge(桥接)8. Composite(组合)9. Decorator(装饰)

2015-07-13 21:13:20 398

转载 命令模式,状态模式和职责链模式的不同

命令模式:将多个命令只提交给一个执行该命令的对象而职责链模式相反:只将一个请求提交给多个能执行该命令的对象状态模式与职责链模式的区别:状态模式是让各个状态对象自己知道其下一个处理的对象是谁,即在编译时便设定好了的;而职责链模式中的各个对象并不指定其下一个处理的对象到底是谁,只有在客户端才设定。转自:http://bbs.csdn.net/topics/300013197

2015-07-06 21:36:27 1269

转载 单例模式

单例模式单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目。但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况,可能会优先考虑使用全局或者静态变量的方式,这样比较简单,也是没学过设计模式的人所能想到的最简单的方式了。一般情况下,我们建立的一些类是属于工具性质的,基本不用存储太多的跟自身有关的数据,在这种情况下,每次都去new一

2015-07-06 17:17:04 433

转载 构造函数不能为虚函数

1,从存储空间角度    虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,无法找到vtable,所以构造函数不能是虚函数。2,从使用角度        虚函数主要用于在信息不全的情况下,能使重载的函数得到对应的调用。构造函数

2015-06-08 17:15:23 434

原创 Effective C++笔记第一部分:让自己习惯C++

1、define和const的区别       (1)、define是预处理命令,是在预处理阶段展开,而const是在编译阶段。       (2)、无法用define创建一个类的专属长廊,因为define并不重视作用域,一旦宏被定义,它就在其后的编译过程中有效,除非在某处被undef,即define不能提供任何封装性。       (3)、类中的常量可以用static const i

2015-05-13 19:08:18 421

转载 用C++实现一个不能被继承的类

在C++中,子类的构造函数会自动调用父类的构造函数子类的析构函数也会自动调用父类的析构函数。要想一个类不能被继承,我们只要把它的构造函数和析构函数都定义为私有函数。那么当一个类试图从它那继承的时候,必然会由于试图调用构造函数、析构函数而导致编译错误。可是这个类的构造函数和析构函数都是私有函数了,我们怎样才能得到该类的实例呢?这难不倒我们,我们可以通过定义静态来创建和释放类的实例

2015-05-06 11:32:44 555

原创 四种常用的类型转换

(1)static_cast(exdivssion)该运算符把exdivssion转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安全的。②用于基本数据

2015-05-06 11:27:43 1100

转载 浅议 Dynamic_cast 和 RTTI与虚函数表的关系

浅议 Dynamic_cast 和 RTTI写这篇博文的目的是,记录学习过程。对于问题要较真,在解决这个问题中会学到很多,远远超过自己期望,锻炼思维,享受这个过程。问题: Static_cast 与 Dynamic_cast的区别来自书本上的解释:  用 static_cast ( expression )  1. static_cast(expression) The

2015-05-06 10:10:33 2934

原创 C++中new和delete

New运算符1、new表达式:当我们使用一条new表达式时:string *sp=newstring(“a value”);string *arr=newstring[10];实际上执行了三步操作。第一步,new表达式调用一个名为operatornew(或者operatornew[])的标准库函数。改函数分配一块足够大的、原始的、未命名的内存空间以便存储特定类型的对象(或者对象

2015-05-04 22:52:33 605 1

原创 全排列的编码与解码(康拓展开)

一、康托展开:全排列到一个自然数的双射 X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! ai为整数,并且0  适用范围:没有重复元素的全排列  二、全排列的编码: {1,2,3,4,...,n}的排列总共有n!种,将它们从小到大排序,怎样知道其中一种排

2015-05-04 16:01:43 590

转载 同步、异步和阻塞、非阻塞

“阻塞”与"非阻塞"与"同步"与“异步"不能简单的从字面理解,提供一个从分布式系统角度的回答。1.同步与异步同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由*调

2015-04-27 14:37:28 402

原创 union中的内存分配

在union联合体中,所有的变量是公用一个内存的,即以最大内存变量作为整个union的内存空间进行申请。同时也服从内存对其的策略,即如果同时又一个char和一个int类型,则占据4个字节的内存空间,最低字节就是char所对应的值,而如果单纯的只给char变量赋值,则int型变量的高三个字节是未定义的。#includeusing namespace std;union CC{ int

2015-04-21 17:10:34 4481

原创 new和malloc的区别

1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void *malloc(unsigned int num_bytes); 说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。1.

2015-04-20 21:24:37 391

转载 进程间通信

进程通信的含义进程是转入内存并准备执行的程序,每个程序都有私有的虚拟地址空间,由代码,数据以及它可利用的系统资源(如文件,管道)组成.多进程/多线程是windows操作系统的一个基本特征.Linux系统一般都统称为进程.由于不同的进程运行在各自不同的内存空间中,其中一个进程对于变量的修改另一方是无法感知的,因此,进程之间的消息传递不能通过变量或其他数据结构直接进行,只能通过进程间通

2015-04-17 10:53:27 771

转载 c/c++内存分配与内存对齐全面探讨

不明白内存分配和指针的可以看看,其实这本是我们老师留的一个操作系统科技小论文作业,不知道写什么,干脆把以前收藏的经典C内存分配的文章整理并修改了一下。       此文章有2个用处,1:这是个小论文,格式完整,大家可以复制回去交作业;2:这是整理的经典C内存分配小教程(也加了些我自己的观点),不明白内存分配的可以看看。还有很重要的一个问题:      这篇文章引用的很多内容我也不知道究竟是出自

2015-04-17 10:50:33 424

转载 进程、线程通信与同步

1.0 Linux进程间通讯管道/FIFO:管道中还有命名管道和非命名管道(即匿名管道)之分,非命名管道(即匿名管道)只能用于父子进程通讯,命名管道可用于非父子进程,命名管道就是FIFO,管道是先进先出的通讯方式    消息队列:消息队列是用于两个进程之间的通讯,首先在一个进程中创建一个消息队列,然后再往消息队列中写数据,而另一个进程则从那个消息队列中取数据. 需要注意的是,消息队列是

2015-04-17 10:48:14 483

转载 c++重载、覆盖和隐藏

4.c++重载、覆盖、隐藏的区别和执行方式既然说到了继承的问题,那么不妨讨论一下经常提到的重载,覆盖和隐藏4.1成员函数被重载的特征(1)相同的范围(在同一个类中); (2)函数名字相同; (3)参数不同; (4)virtual 关键字可有可无。 4.2“覆盖”是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类); (2)函数名字相同

2015-04-17 10:14:38 440

原创 C++虚拟继承例子

代码如下:#includeusing namespace std;class Base {public: void fun(){cout<<"Base::fun"<<endl;} virtual void f() { cout << "Base::f" << endl; } virtual void g() { cout << "Base::g" << endl; }

2015-04-16 22:19:40 569

转载 c++ 虚继承详解

#include using namespace std;class A{ virtual void f(){};};class B : public virtual  A{   virtual void f(){};};class C: public virtual  A{ virtual void f(){}; virtual void t(){

2015-04-16 22:17:51 533

转载 C++ 虚函数表解析

转自:http://blog.csdn.net/haoel/article/details/1948051前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:

2015-04-15 22:01:20 486 1

原创 vector的所有函数和使用的注意事项

1、构造函数:       (1)vector       (2)vector       (3)vector       (4)vector       (5)vector       (6)vector2、assign函数:(只有顺序容器有)assign函数可以对已有容器进行重新赋值,可以改变原来容器的size和capacity。构造函数只能用相同容器类型和相同

2015-04-11 14:16:42 5447 1

原创 普通函数和类成员函数const重载

函数参数的const重载只能重载引用型的,因为非引用的const和普通的非const参数一样。成员函数用const重载总共有三种方式,有三个地方可以写const,要注意const在不同的地方的意义。#include#include#includeusing namespace std;void fun(const int& i)//fun(10)这能用这个函数{ cout<<

2015-03-28 10:34:59 651

原创 矩阵连乘时最少乘法次数

可以用递归,就是速度慢些,也可以直接把递归改成自顶向下的动归,或者直接用自底向上的动归,都可以,不过这里只是为了计算14年阿里笔试的一道题,所以就直接写了个递归版本的。代码:#includeusing namespace std;int fun(int *A,int lo,int hi){ if(lo==hi) return 0; int q=INT_MAX; for(i

2015-03-26 20:53:24 3111

原创 用优先级队列实现霍夫曼编码

用优先级队列实现霍夫曼编码,采用贪心算法,每次从优先级队列中选取两个最小元素进行合并。注意用优先级队列时用的是小顶堆,采用仿函数做比较器,不能用函数指针来实现。代码如下:#include#includeusing namespace std;struct Node{ char c; int val; Node *lChild; Node *rChild; Node(

2015-03-24 16:52:07 1021

原创 最长上升子序列

思路:用动态规划+二分搜索进行#includeusing namespace std;//二分搜索,返回>=target的第一个数的下标int binarySearch(int *A,int N,int target){ int lo=0,hi=N-1; while(lo<=hi) { int mid=lo+((hi-lo)>>1); if(A[mid]<target)

2015-03-23 17:45:12 462

原创 二维数组传递参数

在堆上开辟二维数组,和在栈上开辟二维数组传递参数是可以不一样的,尤其对于字符串更是这样。#includeusing namespace std;void printf(char **b){ while(*b)//注意此处传入的b必须最后至少最后一组字符是'\0'否则会出错 cout<<*b++<<endl;}void print(char **b){ for(int i

2015-03-23 16:04:26 502

转载 作业、进程、线程

转自:http://blog.csdn.net/hguisu/article/details/19108031. 基本概念作业:用户在一次解决或是一个事务处理过程中要求计算机系统所做的工作的集合,它包括用户程序、所需要的数据集控制命令等。作业是由一系列有序的步骤组成的。作业的完成要经过作业提交、作业收容、作业执行和作业完成4个阶段。在执行一个作业可能会运行多个不同的进程。

2015-03-21 15:14:39 911

原创 程序、进程和作业的关系

程序与进程之间的区别:(1)进程更能真实地描述并发,而程序不能。(2)进程由程序和数据两部分组成,进程是竞争计算机系统有限资源的基本单位,也是进程处理机调度的基本单位。(3)程序是静态的概念;进程是程序在处理机上一次执行的过程,是动态的概念。(4)进程有生存周期,有诞生有消亡。是短暂的;而程序是相对长久的。(5)一个程序可以作为多个进程的运行程序;一个进程也可以运行多个程序。

2015-03-21 14:59:21 14312 1

转载 static的含义以及其在C/C++中的区别

转自:http://blog.csdn.net/yangcs2009/article/details/38359173static关键字是C, C++中都存在的关键字. 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同,本文以C++为准).(1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数

2015-03-21 11:23:55 403

转载 设计一个Cache系统 【双向链表+哈希表】

转自:http://blog.csdn.net/yangcs2009/article/details/38351573今天去面试,面试官让我设计一个cache系统,要求保证最近使用的数据不能被移除出cache,也就是每次添加一个cache项的时候,把最旧的cache项移除出去。    我只记得操作系统里貌似有个差不多的cache算法,记不起名字来,更别提数据结构了。一开始我执着

2015-03-21 10:48:02 728

转载 用两个栈实现队列和用两个队列实现一个栈

转自:http://blog.chinaunix.net/uid-26448049-id-3048424.html1. 用两个堆栈实现一个队列。思路:对于insert,把数据插入到第一个堆栈中;      对于remove,如果第二个堆栈为空,把第一个堆栈的所有元素pop出来并放入第二个堆栈中,然后返回第二个堆栈的第一个元素。// implement Queue

2015-03-11 19:13:23 409

空空如也

空空如也

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

TA关注的人

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