2012年8月7日

摘要: 【概述】 为什么需要hash_map用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改:岳不群-华山派掌门人,人称君子剑张三丰-武当掌门人,太极拳创始人东方不败-第一高手,葵花宝典...这些信息如果保存下来并不复杂,但是找起来比较麻烦。例如我要找"张三丰"的信息,最傻的方法就是取得所有的记录,然后按照名字一个一个比较。如果要速度快,就需要把这些记录按照字母顺序排列,然后按照二分法查找。但是增加记录的时候同时需要保持记录有序,因此需要插入排序。考虑到效率,这就需要用到二叉树 阅读全文
posted @ 2012-08-07 14:10 山本二十八 阅读(2215) 评论(0) 推荐(0) 编辑
摘要: 关联式容器都有一个键值,键值要求必须支持<比较操作。Map或set或multimap或multiset在存储数据时,根据键值的<顺序顺序存储。对于set,因为在插入时需要比较键值是否相等,在此,它对于是否相等的确认方法是:如果 a<b为false 并且 b<a为false,则相等。但是,在定义关联式容器时,可以指定自己的比较函数,见如下map类定义:template<class _Kty, class _Ty, class _Pr = less<_Kty>, class _Alloc = allocator<pair<const _Kty, 阅读全文
posted @ 2012-08-07 14:06 山本二十八 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 函数对象是重载了“()”操作符的普通类对象。因此从语法上讲,函数对象与普通的函数行为类似。用函数对象代替函数指针有几个优点:1)首先,因为对象可以在内部修改而不用改动外部接口,因此设计更灵活,更富有弹性。函数对象也具备有存储先前调用结果的数据成员。在使用普通函数时需要将先前调用的结果存储在全程或者本地静态变量中,但是全程或者本地静态变量有某些我们不愿意看到的缺陷。2)其次,在函数对象中编译器能实现内联调用,从而更进一步增强了性能。这在函数指针中几乎是不可能实现的。3)函数对象属于类对象,可以把函数设计为模板函数。如#define LENGTH(s) (sizeof(s)/sizeof(s[0] 阅读全文
posted @ 2012-08-07 14:05 山本二十八 阅读(375) 评论(0) 推荐(0) 编辑
摘要: 模板必须在使用它的时候才实例化,因此模板不能单独编译。如果把模板声明放在.h文件,把模板函数的定义放在.cpp里。在使用到模板的地方,由于只include了头文件,当然就找不到函数定义的代码。因此,简单的办法就是把模板函数的定义和声明都放在.h头文件里。 但是这就出现了一个问题。a.cpp使用了模板,因此就定义了一个该模板类型的实例。如果b.cpp也使用了与a.cpp相同的模板实例,则编译器又在b.o定义了一个相同的模板实例。这样在最终的可执行程式或库中有重复的模板实例。 为了解决这个问题,可以在编译和链接的时候 加上 -qtempinc选项。编译期在遇到这个选项时,会将模板的实例化代... 阅读全文
posted @ 2012-08-07 14:03 山本二十八 阅读(250) 评论(0) 推荐(0) 编辑
摘要: STL有大量用来处理容器的算法。这些算法可以分为如下几类:排序和搜索、数值处理、集合运算、拷贝等。1、reversetemplate<class BidirectionalIterator>void reverse( BidrectionalIterator it1,BidrectionalIterator it2);需要注意的是,reverse的两个参数均为双向迭代器类型。2、generateeg. Generate(v.begin(),v.end(),rand);3、replace_ifbool odd(int i){return i%2!=0;}replace_if( v.b 阅读全文
posted @ 2012-08-07 14:01 山本二十八 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 非类型模板形参模板形参不必都是类型。Template<classT,size_tN>voidarray_init(T(&parm)[N]){For(size_ti=0;i!=N;i++){Parm[i]=0;}}例2:template<inthi,intwid>classScreen{public:Screen():screen(hi*wid,'#'),cursor(0),height(hi),width(wid){}voiddump(){std::cout<<screen;}private:std::stringscreen;std 阅读全文
posted @ 2012-08-07 13:58 山本二十八 阅读(400) 评论(0) 推荐(0) 编辑
摘要: 【内存使用率】floatCHWMSchedule::GetMemUsedRate(){unsignedlonglongullFreePhyMem=0;unsignedlonglongullUsedPhyMem=0;unsignedlonglongullTotalPhyMem=0;perfstat_memory_total_tminfo;if(perfstat_memory_total(NULL,&minfo,sizeof(perfstat_memory_total_t),1)!=1){printf("GetSystemMemoryFail");return0.0;} 阅读全文
posted @ 2012-08-07 13:45 山本二十八 阅读(311) 评论(0) 推荐(0) 编辑
摘要: #include<stdio.h>#include<term.h>intmain(){intnrows,ncolumns;setupterm(NULL,fileno(stdout),(int*)0);nrows=tigetnum("lines");ncolumns=tigetnum("cols");printf("Thisterminalhas%dcolumnsand%drows\n",ncolumns,nrows);return0;} 阅读全文
posted @ 2012-08-07 13:43 山本二十八 阅读(128) 评论(0) 推荐(0) 编辑
摘要: template<classForwardIterator,classT>ForwardIteratorremove(ForwardIteratorfirst,ForwardIteratorlast,constT&value);<algorithm>RemovevaluefromrangeRemovesfromtherange[first,last)theelementswithavalueequaltovalueandreturnsaniteratortothenewendoftherange,whichnowincludesonlythevaluesnote 阅读全文
posted @ 2012-08-07 11:29 山本二十八 阅读(129) 评论(0) 推荐(0) 编辑
摘要: voidprint(char(*arr)[10],intlen){inti;for(i=0;i<len;i++){printf("%s",arr[i]);}printf("\n");}intmain(){chararr[][10]={"bac","bca","abc","acb","cba","cab"};char*key="bca";char*ptr=NULL;printf("beforeqsort 阅读全文
posted @ 2012-08-07 11:28 山本二十八 阅读(119) 评论(0) 推荐(0) 编辑
摘要: intIBC_InfoIndb::read_file_from_dir(constchar*path,charfilename[][256],intmax_size,int*file_cnt){DIR*dir=NULL;structdirent*entry;cout<<"readdir:"<<path<<endl;dir=opendir(path);if(!dir){fprintf(stderr,"opendir%sfail!\n",path);return-1;}*file_cnt=0;readdir(dir);re 阅读全文
posted @ 2012-08-07 11:26 山本二十八 阅读(124) 评论(0) 推荐(0) 编辑
摘要: #include"apue.h"staticvolatilesig_atomic_tsigflag;/*setnonzerobysighandler*/staticsigset_tnewmask,oldmask,zeromask;staticvoidsig_usr(intsigno)/*onesignalhandlerforSIGUSR1andSIGUSR2*/{sigflag=1;}voidTELL_WAIT(void){if(signal(SIGUSR1,sig_usr)==SIG_ERR)err_sys("signal(SIGUSR1)error" 阅读全文
posted @ 2012-08-07 11:25 山本二十八 阅读(177) 评论(0) 推荐(0) 编辑
摘要: intbase_class::getWriteLock(string&filename){intfd=open(filename.c_str(),O_RDWR|O_CREAT,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);if(fd<0){cerr<<"open"<<filename<<"fail!"<<endl;return-1;}structflockfl;fl.l_type=F_WRLCK;fl.l_start=0;fl.l_whence=SEEK_SET;fl.l_ 阅读全文
posted @ 2012-08-07 11:24 山本二十八 阅读(111) 评论(0) 推荐(0) 编辑
摘要: #include<stdio.h>#include<stdlib.h>#include<stdarg.h>/***COPYRIGHTNOTICE*Copyright(c)2010,ffcs(版权声明)*Allrightsreserved.*@fileDebug.h*@brief按DEBUG_ZONE输出调试消息**当宏DEBUG被打开时,根据设置的DEBUG_ZONE输出相应的消息。DEBUG_ZONE可以通过*修改g_debug_setting的zone_mask修改。**@versionv1.0*@author*@date2010/11/09**修订说明 阅读全文
posted @ 2012-08-07 11:23 山本二十八 阅读(243) 评论(0) 推荐(0) 编辑
摘要: char*getCurrFileName(){FILE*stream;charfullname[1024];stream=popen("pwd","r");fread(fullname,sizeof(char),sizeof(fullname),stream);{inti;for(i=0;i<strlen(fullname);i++){if(fullname[i]=='\n'){fullname[i]=0;break;}}}sprintf(fullname,"%s/%s",fullname,__FILE__);p 阅读全文
posted @ 2012-08-07 11:21 山本二十八 阅读(384) 评论(0) 推荐(0) 编辑
摘要: #include<sys/sem.h>#include<stdio.h>#include<signal.h>#include<unistd.h>#include<stdarg.h>#include<string.h>sigset_toldset;typedefstruct__sig_mask{sigset_tsig_newset,sig_oldset;intset_flag;/*当调用完mask_procmask后,置1,否则,为0*/int(*mask_addsig)(struct__sig_mask*pSigMask, 阅读全文
posted @ 2012-08-07 11:20 山本二十八 阅读(360) 评论(0) 推荐(0) 编辑
摘要: 我们在编程中可能会经常用到时间,比如取得系统的时间(获取系统的年、月、日、时、分、秒,星期等),或者是隔一段时间去做某事,那么我们就用到一些时间函数。linux下存储时间常见的有两种存储方式,一个是从1970年到现在经过了多少秒,一个是用一个结构来分别存储年月日时分秒的。time_t 这种类型就是用来存储从1970年到现在经过了多少秒,要想更精确一点,可以用结构struct timeval,它精确到微妙。struct timeval{ long tv_sec; /*秒*/ long tv_usec; /*微秒*/};而直接存储年月日的是一个结构:struct tm{ int tm_sec... 阅读全文
posted @ 2012-08-07 11:17 山本二十八 阅读(172) 评论(0) 推荐(0) 编辑
摘要: #include"stdio.h"intdays[2][13]={365,31,28,31,30,31,30,31,31,30,31,30,31,366,31,29,31,30,31,30,31,31,30,31,30,31};intLeap(intyear)//判断是否为闰年{return((year%400==0)||(year%4==0&&year%100!=0));}intDeal(intdat0,intdat1){inti,temp,sum0,sum;intyear0,month0,day0,year1,month1,day1;sum0=sum=0 阅读全文
posted @ 2012-08-07 11:14 山本二十八 阅读(196) 评论(0) 推荐(0) 编辑
摘要: /*str_tok.h*/#ifndef_H_STR_TOK#define_H_STR_TOK#include<string.h>#include<stdio.h>#include"FPL_types.h"typedefstruct__NODE{char*pch;struct__NODE*next;}_NODE;typedefstruct__STRCK_TOK{int_MAXLEN;char*pStr;_NODE*phead;void(*setMaxLen)(struct__STRCK_TOK*,int);int(*getMaxLen)(struct 阅读全文
posted @ 2012-08-07 11:06 山本二十八 阅读(655) 评论(0) 推荐(0) 编辑
摘要: #include"stdafx.h"#include<stdarg.h>#include<stdio.h>#include<string.h>#include<stdlib.h>#ifndefDEBUG#defineDEBUG1#endif/*enumbool{false=0,true};typedefenumboolbool;*/boolmatch(char*name2,char*pre2);char*FPF_StrSpilit(constchar*str,char*token,constchar*delimit){char 阅读全文
posted @ 2012-08-07 10:50 山本二十八 阅读(1049) 评论(0) 推荐(0) 编辑

2008年8月26日

摘要: 作者的话:《UNIX AWK使用手册》是我几个月前的作品了,回过头来看,这篇文章实在是很粗燥,因当时我写作并上传这个作品时实在是太忙了,没有对文章的质量进行很好的检查,心里老觉得有愧于网友的厚爱,于是趁闲赶忙重写一遍,虽然不一定会有很大的改观,但质量是肯定要好一点的,唯如此,我的良心上才好受一点,呶,下面就是我的修改稿,各位老友请与第一版相比一下,看是否有所进步!这次改写仍然保留了原有的风格:正文由浅入深,文后附上了大量的相关资料,这样做的原因是为了满足各种用户的需求,这在第一版中已经说过了。这次主要的改变是在内容上,加入了很多新内容,并增加了示例,以帮助读者理解其中的内容,附录也补充了许多新 阅读全文
posted @ 2008-08-26 11:26 山本二十八 阅读(374) 评论(0) 推荐(0) 编辑

2008年8月10日

摘要: Vi 是现存最早的全屏幕编辑器。对这个 UNIX® 程序,人们褒贬不一:虽然它复杂难学,但只要您习惯了就会发觉它是一个特别强大的工具。Vi 用户只要轻轻几按,就一切 OK,除了 Emacs,几乎没有哪个文本编辑器胆敢如此宣称。Mandrakelinux 所包括的实际上是 Vim -- VI iMproved (增强版 Vi),不过在本章中我们还是称它为 Vi。如果您想要进一步了解 Vi,... 阅读全文
posted @ 2008-08-10 14:33 山本二十八 阅读(3631) 评论(0) 推荐(0) 编辑

2008年8月5日

摘要: 1SQL中的单记录函数21.ASCII3返回与指定的字符对应的十进制数;4SQL>selectascii('A')A,ascii('a')a,ascii('0')zero,ascii('')spacefromdual;56AAZEROSPACE7------------------------------------865974832910112.CHR12给出整数,返回对应的字符;13SQ... 阅读全文
posted @ 2008-08-05 16:10 山本二十八 阅读(478) 评论(0) 推荐(0) 编辑

2008年7月31日

摘要: 理解 Proc 文件系统 摘要: Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。尽管在各种硬件平台上的 Linux 系统的 /proc 文件系统的基本概念都是相同的,但本文只讨论基于 intel x86 架构的 Linux /proc 文件系统。 _________________ _________________ ___________... 阅读全文
posted @ 2008-07-31 23:15 山本二十八 阅读(313) 评论(0) 推荐(0) 编辑

2008年7月24日

摘要: 引言使用Shell进行工作的人们对Unix/Linux下的Shell编程都很熟悉,在所有的Shell编程的书中都会提到#!/bin/bash,而这里到底包含了些什么?对操作系统而言,这一行字符串意味着什么?你可能会说,不就是会让 /bin/bash程序来解释这个脚本程序吗?当然你是对的,看看我们的标题,这里我们谈谈解释器,让我们一起来看看脚本文件里的第一句到底对系统而言意味着什么。但有一点我们可先... 阅读全文
posted @ 2008-07-24 22:19 山本二十八 阅读(614) 评论(0) 推荐(0) 编辑

2008年7月22日

摘要: 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。 守护进程的编程本身并不复杂,复杂的是各种版本的Unix的实现... 阅读全文
posted @ 2008-07-22 15:10 山本二十八 阅读(665) 评论(0) 推荐(0) 编辑
摘要: 深入浅出Shell编程: 前言 深入浅出Shell编程: 前言 0.1 shell 背景 0.2 Hello World! 0.3 超越Hello World 0.4 本书结构 现在编程语言越来越多,C, C++, perl, php, Java ...... 有点让程序员无所适从。每种语言都有其优势,在Unix/Linux平台上,Shell脚本使用非常广泛,其原因在于一群聪明人写了许多工具包,你... 阅读全文
posted @ 2008-07-22 10:51 山本二十八 阅读(908) 评论(1) 推荐(0) 编辑

2008年6月30日

摘要: 这篇东西是关于Unix系统操作的教程。也是Unix的入门教程。如果你有兴趣学,请看下去,保证你可以学到许多有用的东西。如果你满足于dos,windows的操作,不想对网络服务器,有任何了解的话,可以不看。因为你并不想成为计算机高手。本教程仅仅讲授Unix系统的常用命令,不涉及Unix的历史、安装和编程。如果你想得到更多的知识, 请查找其他的教材。本教程参考了《精通Unix》、《Unix基础》、《U... 阅读全文
posted @ 2008-06-30 16:09 山本二十八 阅读(1070) 评论(4) 推荐(0) 编辑

2008年6月27日

摘要: 什么是Socket   Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。   Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊... 阅读全文
posted @ 2008-06-27 15:37 山本二十八 阅读(290) 评论(0) 推荐(0) 编辑

2008年5月30日

摘要: 我们每天都在和Windows打交道,很多人可能每天都要面对多次Windows的启动过程,可是您知道在Windows的启动过程背后,隐藏着什么秘密吗?在这一系列过程中都用到了哪些重要的系统文件?系统的启动分为几个步骤?在这些步骤中计算机中发生了什么事情?这些就是本文试图告诉您的。本文的适用范围随着技术的发展,我们能够见到的计算机硬件种类越来越多。以计算机上最重要的组件CPU来说,目前就有很多选择。当... 阅读全文
posted @ 2008-05-30 10:16 山本二十八 阅读(476) 评论(0) 推荐(0) 编辑

导航