posts - 18,  comments - 2,  trackbacks - 0
/**
 * Accelerated C++ 笔记
**/
//计算一个vector<double>类型的变量的中值
//值得注意的是,掉哟跟函数时整个vector参数都会被复制
double median(vector<double> vec)  //不改变向量本身
{
    typedef vector
<double>::size_type vec_sz;

    vec_sz size 
= vec.size();
    
if(size == 0)
        
throw domain_error("median of an empty vector");
    sort(vec.begin(), vec.end());
    
    vec_sz mid 
= size/2;
    
return size % 2 == 0 ? (vec[mid]+vec[mid-1]) / 2 : vec[mid];
}

//根据期中,期末考试成绩和保存家庭作业的向量来计算学生的总成绩
//真个函数不用复制它的参数,因为median已经为我们完成了这个工作
double grade(double midterm, double final, const vector<double>& hw)
{
    
if(hw.size() == 0)
        
throw domain_error("student has done no homework");
    
return grade(midterm, final, median(hw));
}
//函数重载
double grade(double midterm, double final, double homework)
{
    
return 0.2 * midterm + 0.4 * final + 0.4 * homework;
}

/**
    const vector<double>&这种类型被成为"对参数类型为double的向量常量的引用"
    vector<double> homework;
    vector<double>& hw = homework; //hw是homework的一个替代名,
    //对hw的任何操作都等价于对homework的操作

    const vector<double>& chw = homework; //chw是homework的一个替代名,
    //const确保了我们将不会对chw的任何可能改变它的值的操作

    vector<double>& hw1 = hw; //同hw等价,是homework的一个替代名
    const vector<double>& chw1 = chw; //同chw等价,不允许写访问homework的一个替代名
*
*/


//从输入流中将家庭作业的成绩读入到一个vector<double>中
istream read_hw(istream& in, vector<double>& hw)
{
    
if(in){
        hw.clear(); 
//清除原先内容
        double x;
        
while(in >> x)
            hw.push_back(x);
        
//清除流以使输入动作对于下一个学生有效
        in.clear();
    }
    
return in;
}


posted @ 2008-10-04 15:07 xuejzt 阅读(415) | 评论 (0)编辑 收藏
/**
 * Accelerated C++ 笔记
**/
list容器相当于数据结构中的链表,vector容器相当于顺序表。
vector是为快速随机访问而被优化的,同样地,优化了的list类型,可以让我们在容器的任何位置快速的插入和删除元素。
在vector内部插入或删除元素,为了保持快速随机存取的特性,必须移动位于被插入或删除的元素后面的所有
元素。移动元素意味着,时间复杂度为向量元素个数的二次方。
//用list代替vector:主要是因为插入和删除操作太多
list<Student_info> extract_fails(list<Student_info>& students)
{
    list
<Student_info> fail;
    list
<Student_info>::iterator iter = students.begin();

    
while(iter != students.end()){
        
if(fgrade(*iter)){
            fail.push_back(
*iter);
            iter 
= students.erase(iter);
        }
        
else
            
++iter;
    }
    
return fail;
}
list容器的迭代器不支持完全随机访问,所以我们就不能用标准库中sort函数对它进行排序。
对此,list提供了自己的sort成员函数,这个函数使用了 一个优化的算法来为存储在list中的数值排序。
list<Student_info> students
students.sort(compare);
//compare函数可以自己定义



posted @ 2008-10-04 15:03 xuejzt 阅读(1335) | 评论 (0)编辑 收藏
/**
  * Accelerated C++ 笔记
  **/
sort()函数定义在头文件<algorithm>中,它把容器中的数据重新排序成非递减序列。我们之所以用非递减而不用递增是因为,容器中的某些数据元素可能会与其他元素相等。
double x;
vector
<double> numbers;
typedef vector
<double>::size_type vec_size;
vec_sz size 
= numbers.size();

while(cin >> x)
    numbers.push_back(x);
sort(numbers.begin(), numbers.end());
//sort函数巧妙地完成了任务,它仅仅调换了原容器中元素值的相对顺序,而不是创建一个新的容器来存储排序后的结果。

//排序后求中数
vec_sz mid = size/2;
double median;
median 
= size % 2 == 0 ? (numbers[mid] + numbers[mid-1])/2 : numbers[mid];

//如果不希望改变向量本身,就可以通过函数参数的方式调用它
//调用函数时整个vector参数都会被复制
double median(vector<double> vec)
{
    sort(vec.begin(), vec.end());
    
return 
}


posted @ 2008-10-04 14:57 xuejzt 阅读(7244) | 评论 (1)编辑 收藏
mplayer播放列表和循环播放:
$mplayer -playlist <playlist.m3u> -loop <times>
times为播放次数,times=0 时一直循环。

编写shell脚本实现音乐播放:
###music.sh###
#!/bin/sh
musicPath="/media/..." #播放文件目录
cd $musicPath
ls | grep -G "\.[WwMm].[Aa3]$" > music.lst
mplayer -playlist music.lst -loop 0



posted @ 2008-10-04 14:47 xuejzt 阅读(1741) | 评论 (0)编辑 收藏
emacs中复制粘贴与剪贴:
复制: M-w
粘贴: C-y
剪贴: C-w
环粘贴: M-y

复制中用的最多的是Mark set,即set-mark-command.默认的快捷方式有:
1. C-spc
2. C-@
由于C-spc是系统默认用来调用输入法的,所以它被覆盖了,那唯一的方式就是C-@。但是,说实话,这个按键需要很高的技巧,
偶反正按起来相当困难,相当不爽。所以偶用C-'来调用它。
(global-set-key [control \'] 'set-mark-command)

复制粘贴过程中还可能用到的:
全选: C-x h

欢迎大家给予补充和指正。。。
posted @ 2008-10-04 14:38 xuejzt 阅读(393) | 评论 (0)编辑 收藏
emacs里面undo有两种快捷方式:
1. C-x u
2. C-/
我喜欢用第二种方式,因为用起来很方便,而且因为这种方式,让我想到了用“C-;”来表示redo.因为“'”就在“/”的旁边,当
小指放在"\"上时无名指可以很轻松地放在";"上面。
redo的调用方式:
(require 'redo)
(global-set-key [(control \;)] 'redo)
posted @ 2008-10-04 14:36 xuejzt 阅读(403) | 评论 (0)编辑 收藏
程序的编译

C++编译器(如g++)也可以用于编译C程序,事实上g++内部还是调用了gcc,只不过加上了一些命令行参数使得它能够识别C++源代码。
gcc 在运行是将完成预处理、编译、汇编和连接4个步骤并最终生成可执行代码。产生的可执行程序默认情况下被保存为a.out文件。gcc命令可以接受多种文件 类型并依据用户指定的命令参数对它们做出相应的处理。这些文件类型包括:c/c++源文件(.c, .cxx)、汇编语言源文件(.s)、预处理输出文件(.i)、目标代码(.o)、静态库文件(.a)以及 动态库文件(.so).


posted @ 2008-09-19 16:35 xuejzt 阅读(214) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2008-09-19 16:27 xuejzt 阅读(433) | 评论 (0)编辑 收藏
仅列出标题
共2页: 1 2 

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜