- 博客(14)
- 收藏
- 关注
原创 为GCC添加头文件和库的搜索路径
C_INCLUDE_PATH和CPLUS_INCLUDE_PATH分别指定了GCC编译C和C++文件时头文件的搜索路径,而LIBRARY_PATH则指定了链接时库的搜索路径。这些搜索路径的优先级低于命令行指定路径,高于系统默认路径。具体用法如下:$C_INCLUDE_PATH=path_to_include$export C_INCLUDE_PATH
2013-10-20 17:47:03
2023
原创 sudoers配置
在配置sudoers时应注意,文件后面的配置会覆盖前面的配置。由于sudoers文件已有配置如下:# User privilege specificationroot ALL=(ALL:ALL) ALL# Members of the admin group may gain root privileges%admin ALL=(ALL) ALL# All
2013-10-19 16:26:32
1283
原创 位数组
如果某类对象只有两种值,我们只需要一个二进制位就能表示该对象。这样,一个32位整型数就能表示32个对象。位数组就是用来存储这种对象的数组。其内部为整数数组,整数的每一位都表示一个对象。若按正常方式存储对象,则至少要8位存储空间,使用位数组大大降低了存储需求。值得注意的是,位数组只能存储只有两种值的元素。下面是我写的一个位数组的简单C++实现:#ifndef BIT_ARRAY_H#d
2013-09-27 13:02:04
3837
原创 二分查找
二分查找的思想很简单,但是实现时有多种变体。最常见的实现使用闭区间,并且使用3条件分支:templateint binary_search(T* a, T &key, int imin, int imax) { while (imin <= imax) { int imid = (imin + imax) / 2; if (a[imid] < key) {
2013-09-02 23:45:17
517
原创 EC之Implementations
条款26:Postpone variable definitions as long as possible只要你定义了一个类变量,你就得承受相应的构造和析构成本——即使该变量最终未被使用。或许你觉得你不会定义一个不使用的变量,那不妨考虑下面这个函数,它返回加密后的密码,但如果密码太短,函数会抛出一个类型为logic_error的异常://这个函数过早定义变量"encrypted"st
2013-08-25 23:08:09
489
原创 EC之Designs and Declarations
条款18:Make interfaces easy to use correctly and hard to use incorrectlyC++中充斥着各种各样的接口,function接口、class接口、template接口……每一种接口都是客户与你的代码互动的手段。假设你面对的是一群通情达理的客户,如果他们用错了某个接口,你也应该为此负一部分责任。理想状态下,如果客户试图使用某个接口但却
2013-08-09 23:32:00
638
原创 合并排序
合并排序采用了“分治法”的思想:分解:将n个元素分成各含n/2个元素的子序列解决:用合并排序法分别对子序列递归地排序合并:合并两个已排序的子序列在对子序列排序时,其长度为1时递归结束。下面是合并排序的C++代码:/*合并已排序子数组a[begin...middle],a[middle+1...end]*/template void merge(T a[], int
2013-08-06 10:42:57
539
原创 插入排序
打扑克牌时,我们每摸一张牌,就将它插入到合适的位置,插入排序和这个过程类似。给定一个数组,我们从第二个元素开始,每次都将元素插入到已排序的子数组中。下面给出插入排序的C++代码:void insertionSort(std::vector& v) { for (int i = 1; i < v.size(); ++i) { int j, x; for (j
2013-08-03 23:21:23
441
原创 EC之Resource Management
条款13:Use objects to manage resources假设我们使用一个用来模拟投资行为的程序库,各种投资类型继承自root class Investment:class Investment { ... }; //“投资类型”继承体系中的root class进一步假设,该程序库通过一个工厂函数提供某个特定类型的Investment对象:Investment* cr
2013-08-02 21:43:55
555
原创 EC之Constructors,Destructors, and Assignment Operators
条款05:Know what function C++ silently writes and calls如果没有显式声明,编译器会自动为class创建default构造函数、copy构造函数、copy assignm操作符以及析构函数。显式声明这些函数或在base class中将这些函数声明为private可以阻止编译器的这一行为。如果class内含const或reference成员
2013-07-30 16:53:09
752
原创 EC之Accustoming Yourself to C++
条款01:View C++ as a federation of languages我们可以把C++看成四部分,即C,Object-Oriented C++,Template C++,STL。C是C++的基础,只不过C没有模板,没有异常,没有重载。Object-Oriented C++则使C++拥有了面向对象设计的能力,类,封装,继承,多态,不一而足。Template C++是C+
2013-07-28 09:30:26
872
原创 认真地看一遍《Effective C++》
之前草草地看了一两遍《Effective C++》(以下简称EC),但发现效果不是很好,所以从今个儿重新看一遍,边看边写学习笔记,以加深理解。PS:其实我本来打算在博客园写的,都已经开好头了,不过还是更喜欢这儿的界面,所以我过来了
2013-07-28 07:26:29
506
原创 JS函数柯里化及其应用
函数柯里化用来创建已经设置好一个或多个参数的函数。下面是一个用来创建柯里化函数的通用函数。function curry(fn) { var outerArgs = Array.prototype.slice.call(arguments, 1); return function() { var innerArgs = Array.prototype.slic
2012-08-22 19:18:25
3695
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人