C++11 中的 lambda 函数

c++ 标准库里有一个函数 sort(),可以对容器的元素进行排序。它的函数原型是(参考资料 [1]):

template <class RandomAccessIterator>
void sort (RandomAccessIterator first, RandomAccessIterator last);

template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

其中第三个参数是一个比较函数,它接收两个容器中的两个元素,返回比较结果。如果没有第三个参数,默认按元素的升序排列。

例如,我们要将一个整型数组降序排列:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

static bool compare_int(int 

阅读全文…

git 使用笔记 (2)

合并指定文件

假设 master 中有文件 a 和 b,在分支 br1 中对 a 和 b 都进行了修改并且已经提交,如果只想把在 br1 中对 a 的修改合并到 master 中,执行命令:

git co master
git co br1 a

即先切换到要修改的分支(例如这里的 master),然后执行命令:

git co [分支名称] [要合并的文件1] [要合并的文件2] ...

分支的删除

假设有一个中心仓库 git-repos,有分支 master 和 br1;两个工作目录 …

阅读全文…

sicp 笔记 (5)

第二章习题 2.73 – 2.97 的解答。

E-2.73:

(a) 因为 number 和 variable 使用的是 scheme 提供的原子类型,并不是自定义的类型。

(b)

(define (install-deriv-package)

  (define (deriv-sum expression var)
    (make-sum ((get 'deriv (operator expression)) (addend expression) var)
              ((get 'deriv (operator expression)) (augend expression) var)))

  (define (deriv-product expression var)
    

阅读全文…

debian 硬盘安装 linuxmint

debian7 出来后马上试用了一下,gnome3 不出意外地令人失望。本来想换 xfce 的,忽然想起 linuxmint 搞的 mate 和 cinnamon,其中 mate 是基于 gnome2 改的,而 cinnamon 基于 gnome3。本着与时俱进的原则,网上搜了下 cinnamon 发现挺好看的,而且发展了有一段时间了(最重要是这个,谁都不想一个软件用了两天作者就说不干了)。在 kvm 上试用了一下 linuxmint 打包的 debian cinnamon 201303 版,越用越爽,果断连论文都不改了,先换了系统再说。

官网的 iso 是 dvd 的,而我只有一张 cdrw,很不幸地光驱又抽风了,于是想用硬盘安装。用 google 搜“linuxmint 硬盘安装”,第一条结果是参考资料 [1],但是试了几次都出错了,说什么“getpwuid_r(): failed due to …

阅读全文…

bash 实现目录遍历

脚本的最初原型是当年用 fvwm 的时候为了山寨一个生成家目录下的树形结构菜单写的一个广度优先遍历;后来在把文件系统从 ext3 转到 ext4 的时候重新分区,把文件备份到 windows 上,结果还原回来的时候权限都乱了,于是把 queue 整理了一下写成一个单独的脚本用来改权限;后来还实现了一个深度优先遍历的版本。今天把这两个函数都整理一下。一般来说简单的操作用 find + 各种工具就行了,除非是对遍历顺序有要求或操作比较复杂。

#!/bin/bash

# http://ouonline.net/

IFS=$(echo -en "\n\b") # in case of space(s) in dentry name

# -------------------------------------------------------------------------- #

function dfs()
{
    #if [ $# -ne 2 ]; 

阅读全文…

使用 fuse 编写文件系统 (2)

读写文件

在第一个程序的基础上增加读写 hello-world 的功能:

#define FUSE_USE_VERSION 26

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <fuse.h>

#define BUFFSIZE 8192

static int content_size;
static char content[BUFFSIZE];
static const char* fname = "hello-world";

static int ou_readdir(const char* path, void* buf, fuse_fill_dir_t filler,
                      off_t 

阅读全文…