学做人,学做事
做一个有能力、可依靠、有责任感的人
学习个人理财
学会节流,做好开源
学摄影,学吉他
提高自己审美
多读书,学做菜
定期旅行,看外面的世界
给自己定个五年、十年的计划
踏踏实实一步一步走下去
不管怎样,都要活成自己喜欢的样子
学做人,学做事
做一个有能力、可依靠、有责任感的人
学习个人理财
学会节流,做好开源
学摄影,学吉他
提高自己审美
多读书,学做菜
定期旅行,看外面的世界
给自己定个五年、十年的计划
踏踏实实一步一步走下去
不管怎样,都要活成自己喜欢的样子
任何人写程序都会出错,正如《C++编程规范》所说,真正可怕的错误不是编译时的错误,而是运行时错误。
有的程序可以通过编译, 但在运行时会出现Segment fault(段错误)
这通常都是指针错误(一般就是空指针)引起的,或者访问了不能访问的内存(数组越界,系统保护)
我们不可能用GDB一句一句的去找,真正的英雄都善于使用手中的武器。这就是core file
所谓core,就是当程序down掉的时候,操作系统把程序的内存内容dump下来,这个动作就是core dump,动作的结果就是core文件
产生:
1.程序挂了,操作系统产生
2.通过gcore $pid命令直接导出相应进程的core文件,此命令运行后, 会恢复程序的执行, 不影响程序的运行
3.通过另一个进程发送SIGABRT信号给当前进程, 虽然也能产生core文件,但是程序随着一起终止掉
将Singleton类的构造函数定义为private,这样就不能实例化为一个对象(抽象类),用户访问唯一实例的方法只有通过getInstance()成员函数。
加入Garbo做为Singleton的内嵌类,程序运行结束时,系统会调用Singleton的静态成员Garbo的析构函数,该析构函数会删除单例的唯一实例。
/*
* Copyright (c) 2016 xxxx Inc, All rights reserved.
* Created: 2016-02-21
*/
#include <iostream>
class Singleton{
class Garbo{
public:
Garbo(){std::cout << "Garbo" << std::endl;}
~Garbo(){
if(Singleton::m_instance != NULL)
{
std::cout << "delete m_instance" << std::endl;
delete m_instance;
}
}
};
public:
static Singleton *getInstance()
{
if(m_instance == NULL){
std::cout << "m_instance = new Singleton();" <<std::endl;
m_instance = new Singleton();
}
}
private:
Singleton(){}
private:
static Singleton *m_instance;
static Garbo m_garbo;
};
Singleton *Singleton::m_instance = NULL;
int main()
{
std::cout << "getInstance first" << std::endl;
Singleton *p = Singleton::getInstance();
std::cout << "address: " << static_cast<const void *>(p) << std::endl;
std::cout << "getInstance second" << std::endl;
Singleton *q = Singleton::getInstance();
std::cout << "address: " << static_cast<const void *>(q) << std::endl;
return 0;
}
快速排序由 C.A.R.Hoare(东尼霍尔,Charles Antony Richard Hoare)在1960年提出,之后又有许多人做了进一步的优化。如果你对快速排序感兴趣可以去看看东尼霍尔1962年在Computer Journal发表的论文“Quicksort”以及《算法导论》的第七章,东尼霍尔在计算机领域的贡献还有很多很多,他在1980年获得了图灵奖。
假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放在6的右边,比基准数小的数放在6的左边,类似下面这种排列:
3 1 2 5 4 6 9 7 10 8
在初始状态下,数字6在序列的第1位。我们的目标是将6挪到序列中间的某个位置,假设这个位置是k。现在就需要寻找这个k,并且以第k位为分界点,左边的数都小于等于6,右边的数都大于等于6。想一想,你有办法可以做到这点吗?