C/C++
文章平均质量分 64
谷堆间的驴子
这个作者很懒,什么都没留下…
展开
-
一个双向链表的实现
上半年看《数据结构与算法分析 C++描述的》的时候曾写过一个链表,这几天想起来翻了翻VS的工程文件,发现还在,拿出来分享一下。只支持简单的插入和删除,记得当时在类的构造和析构上费了点周折。#ifndef LINKLIST_H#define LINKLIST_H#includeusing namespace std;templateclass Linklist{priv原创 2012-09-22 13:41:01 · 486 阅读 · 0 评论 -
lambda表达式(python & C++)
1. python中的lambda表达式##声明:内容整理自Dive in python中文版,一个不错的学习python地方。lambda函数允许用户快速定义单行最小函数,有点像C中的inline函数,当函数过于复杂时,不建议使用lambda。lambda可以接收任意多个参数并返回单个表达式的值,同时,lambda函数不能包含命令,包含的表达式不能超过一个。# 以下三种方原创 2012-12-29 12:19:10 · 1175 阅读 · 0 评论 -
仿函数和priority_queue
1. STL中的priority_queue模板定义:template , class Compare = less > class priority_queue;//第一个参数是元素类型;//第二个参数是保存数据的容器,通常是数组类的,比如vector、deque,默认用vector//第三个参数是元素比较方式,默认用priority_queue利用大数堆或者小数堆实现,它原创 2012-12-28 14:22:23 · 2098 阅读 · 0 评论 -
OS复习-内存管理
0. Preview用户程序所经历的编译和执行过程动态加载:进程受内存大小的限制,只有在被其他进程调用时才被加载到内存,即将加载延迟到运行时。动态链接:通常用于系统库,即将链接延迟到运行时,否则的话所有使用该库的进程都需要一份拷贝,还有一个好处是可以较好的处理不同版本的库更新。1. 基本概念计算机的地址:为方便程序设计,提高物理存储资源的使用效率,计算机的地原创 2013-01-09 22:52:27 · 888 阅读 · 0 评论 -
并查集(union-set)
应用:union/set及其应用并查集是一种树形的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题,常常在使用中以森林表示。1. 等价关系 具有自反性、对称性和传递性三个性质称为等价关系,如电气连通性。 给定一个等价关系“~”,基于以上性质,为判断是否a~b,只需验证a和b是否同属一个等价类,这给我们提供了解决等价问题的方法原创 2013-01-03 11:10:47 · 3388 阅读 · 0 评论 -
shell的一些基本知识
Preview->几个关于shell的链接:1.CoolShellshell解释执行,而不是编译执行alias:设定别名,如alias name='cd tmp', alias there=/home/user3。单独的alias可以看当前所有别名,unalias禁止一个别名。env:查看用户环境。$:变量替代,{ }用来区分变量名和周围的文本。(注,变量替代都是局原创 2012-12-04 16:50:33 · 446 阅读 · 0 评论 -
编程珠玑 Chap 2
第二章的三个问题A问题:给定一个包含40亿个随机排列的32位整数的文件,找出一个不在文件中的32位整数。在具有足够内存的条件下,怎么解决?如果仅有几百字节的内存,但有几个外部临时文件可用,又怎么解决?不得不说,这个问题A看得我真心DT,也许译者的翻译水平太差,多处歧义的地方。。后来看答案才恍然大悟。。内存足够的话解决方法很简单,采用第一章位图的方法,复杂度O(n)。内存不足但有原创 2012-09-22 22:32:15 · 501 阅读 · 0 评论 -
编程珠玑 Chap1
第一章中讨论的问题:给定最多1000万个无重复的7位整数,如何利用1MB(左右)的内存空间(磁盘空间充足)完成排序?三种解决方案:1.利用基于磁盘的归并排序。这种方法最容易想到,缺陷也很明显,归并排序通常需要原始文本两倍的内存空间,原始文本大小为10000000*32bits(int型数据)=40MB,内存肯定是不够用的,需要外部工作文件(磁盘)的支持。即整个过程是:读取数据->多次读取磁原创 2012-09-22 20:22:01 · 669 阅读 · 0 评论 -
“c缺陷与陷阱”
========================== 《c缺陷与陷阱》笔记 ==========================”细节打败一切““大多数错误都出在制作者在上床睡觉之前做的最后一件工作,所以,在你准备最后做一点什么之前,还是早点睡吧”-- chap.1 --1. 字符和字符串'a' //字符,实际上代表一个整数,对应ASCII中的编码值"a" /原创 2013-01-14 22:14:18 · 1477 阅读 · 0 评论 -
算法设计技巧
从算法的实现向算法的设计转变,提供解决问题的思路1.贪心算法一种局部最优算法设计思路,思想是保证每一步选择在当前达到最优。一个很常见的贪心算法案例是零钱找取问题。调度问题:书上的调度问题比较简单,其目标是所有作业的平均持续时间(调度+运行)最短,无论是但处理器还是多处理器,最优解的方案总是按作业的长短排序进行调度。《计算机算法设计与分析》上的作业调度的目标是最后完成时间最小,这要稍微复原创 2012-12-26 18:21:55 · 3194 阅读 · 0 评论 -
类模版的分离编译问题
模板不是数据类型,只能算是一种行为集合的表示。编译器在使用模板时,通过更换模板参数来创建数据类型。这个过程就是模板实例化(Instantiation), 从模板类创建得到的类型称之为特例(specialization),说白了就是创建了一个新类型。 模板实例化取决于编译器能够找到可用代码来创建特例(称之为实例化要素,point of instantiation),也就是说,编译器不但要看到模板的声原创 2013-03-07 22:22:19 · 3470 阅读 · 0 评论 -
散列相关
1. 基本概念散列表依靠散列函数,将每个key映射到0~TableSize-1范围的某个数,将对应的value放入到该数索引的位置上。没有冲突的理想散列表是不存在的,因此设计散列表时面临的关键问题是如何设计散列函数、如何解决冲突。2. 散列函数为保证散列表具有较好的性质,通常要求表的大小是素数(参考函数nextPrime()),这样散列函数才有机会将key均匀分散。对于整数来说:一原创 2013-01-02 16:53:25 · 2330 阅读 · 0 评论 -
等概率选取随机流中的元素
给定一个输入流,停止时的长度未知(假设无休止的进行下去),如何等概率的获取每一个位置上的元素。解决:设输入流当前长度为n,以1/n的概率获取当前位置的元素来替代之前获取的元素可以用归纳法证明:当队列长度为1时,获取该元素的概率p=1/1 (100%)当队列长度为2时,获取位置为2元素的概率p=1/2(50%),即以50%的概率替代位置1上的元素,这样每个元素被获取的概率均为50%原创 2012-09-22 17:18:30 · 757 阅读 · 0 评论 -
编程之美3.1解法
书上解法一复杂度应该是O(N*N*M)的时间,解法二的复杂度是O(N*M)的时间和O(N)的空间。感觉自己的这个实现更好一些,O(N*M)的时间:bool FindSub(char *a, char *b){ for(int i = 0; i<N; i++) { int j = 0; while(a[(i+j)%N]==b[j]) { if(j < M-1原创 2012-11-27 16:31:05 · 1055 阅读 · 0 评论 -
传递指针的引用
简单的说,跟传递指向指针的指针带来的效果类似。目的是改变指针的指向(单纯传指针只能改变指向区域的内容),也就是传引用带来的效果。一个小例子,调用fuc()输出的是30,即改变了参数指针的指向;调用fuc2()输出的还是2。#include "StdAfx.h"#include using namespace std;int *b = new int;void fuc(i原创 2012-12-07 09:42:53 · 478 阅读 · 0 评论 -
自定义set<T>的比较函数
#include "stdafx.h"#include #include using namespace std;//首先实例化comp aa; 然后aa(lhs, rhs)进行比较struct comp{ bool operator ()(const int &a, const int &b) { return a>b; }};int main(){ set s原创 2012-12-25 22:27:36 · 3607 阅读 · 0 评论 -
string对象与数值的转换
#include "stdafx.h"#include #include #include using namespace std;string convertToString(double x){ ostringstream o; if(o<<x) return o.str(); return "error";}double convertFromString(c原创 2012-12-25 21:46:17 · 480 阅读 · 0 评论 -
STL中的deque和list
deque采用分块的线性存储结构,每一块的大小一般为521 B,成为一个deque块,所有的deque块使用一个map管理,每个map数据项记录各个deque块的首地址。对deque使用push_back()时会在尾部扩张队列,使用push_front()和insert()时不会扩张队列而是覆盖原始元素。list的实现是双向循环链表,即头节点的前驱元素指向尾元素的首地址,尾元素的后继元素指原创 2012-12-26 12:36:47 · 767 阅读 · 0 评论 -
位运算技巧
(from:http://blog.csdn.net/nash_/article/details/8262185)1.判断int型最大值int getMaxInt(){ return (1<<31) - 1;//2147483647 //return ((unsigned int)-1) >> 1;//2147483647,在不知道int型占用几个字转载 2012-12-17 10:54:59 · 382 阅读 · 0 评论 -
new/delete和malloc/free的区别
Ref: hackbuteer1‘s blog1、本质区别malloc/free是C/C++语言的标准库函数,new/delete是C++的运算符。对于用户自定义的对象而言,由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不会自动调用构造函数和析构函数,从而无法满足动态管理对象的要求。因此C++需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能原创 2012-12-30 16:03:33 · 521 阅读 · 0 评论 -
几种排序算法总结
1. Insertion Sort最简单的排序算法之一/* * Insertion Sort * 2012.10.15, by jfk * Time Complexity: O(n*n) */ template void insertion_sort(Vector, &a) { int j = 0; for(int p = 0; p < a.size原创 2012-10-15 13:12:45 · 1612 阅读 · 0 评论