![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c/c++
文章平均质量分 57
hxxiaopei
这个作者很懒,什么都没留下…
展开
-
如何使用位运算实现循环移位?
循环移位区别于一般移位的是移位时没有数位的丢失。循环左移时,用从左边移出的位填充字的右端,而循环右移时,用从右边移出的位填充字的左侧。这种情况在系统程序中时有使用,在一些控制程序中用得也不少。设有数据说明:a=01111011,循环左移2位 正确结果: 11101101过程:b=a>>(8-2) 用来得到正常左移丢失的位和循环移位后其正确位置 b=00000001; a=a原创 2006-09-20 17:22:00 · 2052 阅读 · 0 评论 -
C程序如何使用C++写好的模块
一个使用C++写好的程序,c程序如何使用?1. 采用 function (args)函数。 Function中利用C++类等模块实现相应的功能。但是args中不包含与C++模块(类)相关的类型,均为C能接受的类型。如果需要返回本来需要vector保存的结果,现在用char buff[LEN]保存。2. 定义cFunction(args)接口,与function完全相同,但是需要用C编译原创 2008-11-28 14:59:00 · 1293 阅读 · 0 评论 -
Boost::Regex详解
要使用Boost.Regex, 你需要包含头文件"boost/regex.hpp". Regex是本书中两个需要独立编译的库之一(另一个是Boost.Signals)。你会很高兴获知如果你已经构建了Boost— —那只需在命令提示符下打一行命令——就可以自动链接了(对于Windows下的编译器),所以你不需要为指出那些库文件要用而费心。 你要做的第一件事就是声明一个类型 basic_reg转载 2008-10-28 07:54:00 · 2458 阅读 · 0 评论 -
文件缓冲区
最近处理数据,经常需要读一行数据,处理,写入文件,采用fprintf函数效率很低,好的做法就是先把数据写入缓冲区,然后缓冲区满后再写入文件,这样减少IO操作。下面吧这个功能封装,构造函数需要写入输出文件路径已经缓冲区大小,然后writeToFile函数实现将字符串写入文件,最后用close来关键文件以及清空缓冲区 #ifndef FILEBUFF_H#define FILEBUFF_H原创 2008-07-07 19:09:00 · 1438 阅读 · 0 评论 -
昨天看了一下 Ctraps and pitfalls,有些细节以前确实没注意过。
1. 贪心法:每一个符号应包含尽可能多的字符。所以a+++b就不能理解了。 2. (*(void(*)())0)()的理解 typedef void (*funcptr)(); (*(funcptr)0)() 3. 单目运算符---算术运算符---移位运算符---关系运算符---逻辑运算符 4. 只有&& || ?: ,保证最左到右的原创 2008-06-25 07:54:00 · 1001 阅读 · 0 评论 -
valgrind memcheck 错误分析
1.默认使用工具memcheck2.输出到XML文件:valgrind --leak-check=full --xml=yes --log-file="log.xml" myprog arg1 arg23.错误解释3.1Illegal read / Illegal write errors例如:Invalid read of size 4 at 0x40F6BBCC:转载 2008-07-29 13:43:00 · 6022 阅读 · 0 评论 -
防止内存泄露 Linux下用Valgrind做检查
用C/C++开发其中最令人头疼的一个问题就是内存管理,有时候为了查找一个内存泄漏或者一个内存访问越界,需要要花上好几天时间,如果有一款工具能够帮助我们做这件事情就好了,valgrind正好就是这样的一款工具。 Valgrind是一款基于模拟linux下的程序调试器和剖析器的软件套件,可以运行于x86, amd64和ppc32架构上。valgrind包含一个核心,它提供一个虚拟的CP转载 2008-07-29 09:15:00 · 5834 阅读 · 0 评论 -
自动添加注释(转)
程式的时候给代码注释有时候蛮烦人的,尤其是用英文写注释的时候,但是养成写注释的习惯,对日后代码的维护还是很有帮助的,一般脚本的开头会注明编写时间,版本,用途等说明。VIM 里面能够使用映射(map)来帮您自动插入这些信息,就像下面这样#****************************************************# Author: Muddyboot -转载 2008-07-27 20:30:00 · 4535 阅读 · 1 评论 -
gcc命令行详解
1、gcc包含的c/c++编译器gcc、cc、c++、g++gcc和cc是一样的,c++和g++是一样的,一般c程序就用gcc编译,c++程序就用g++编译2、gcc的基本用法gcc test.c这样将编译出一个名为a.out的程序gcc test.c -o test这样将编译出一个名为test的程序-o参数用来指定生成程序的名字3、为什么转载 2008-07-20 10:29:00 · 2260 阅读 · 0 评论 -
聚类算法
转自:http://baike.baidu.com/view/69222.htm聚类(Cluster)分析是由若干模式(Pattern)组成的,通常,模式是一个度量(Measurement)的向量,或者是多维空间中的一个点。聚类分析以相似性为基础,在一个聚类中的模式之间比不在同一聚类中的模式之间具有更多的相似性。 聚类的用途是很广泛的。在商业上,聚类可以帮助市场分析人员从消费者数据库中区转载 2009-03-07 15:24:00 · 3401 阅读 · 0 评论 -
汉字编码标准
汉字编码标准 GB2312范围: 0xA1A1 - 0xFEFE汉字范围: 0xB0A1 - 0xF7FEGBK范围: 0x8140 - 0xFEFEBIG5范围: 0xA140 - 0xF9FE, 0xA1A1 - 0xF9FE编码 第一个字节 第二个字节 第三个字节 第四个字节 GB2312 0xB0 - 0xF7 0xA0 - 0xFE GBK 0x81 -转载 2009-03-14 11:23:00 · 4316 阅读 · 0 评论 -
记录一下近几年工作的一些心得
入职几年,先做了1年多的搜索相关项目,比如相关搜索、智能导航等,又做了2年多输入法,都算是从头搞到尾,也碰到很多问题,现在回过头来想想,应该把这个过程记录下来,对自己有帮助,也可以帮助后来的同学原创 2012-02-29 16:00:54 · 1188 阅读 · 0 评论 -
排序之线性排序(counting sort, radix-sort, bucket-sort)
Counting SortCount sort的约束是:排序key可用有限的k描述出来。Count sort有约束的情况下,O(n)的复杂度,stable排序。空间复杂度也为O(n)Counting-Sort(A, B, k) For i Do C[i] For j Do C[A[j]] For I Do C[i] For j原创 2010-11-15 13:27:00 · 2356 阅读 · 0 评论 -
关于数组的一些面试题目
1、google面试题:(1)一个数组存放了2n+1个整数,其中有n个数出现了2次,1个数出现了1次,找出出现1次的数是多少?(可能不少人遇到过,但是当时 我是第一次遇到,我把我的经过给大家讲一遍) A. 由于想在最短时间内解决,我首先想到最简单的办法,使用映射统计的办法,借助辅助数组(长度为n+1,元素为一结构体(包含数值和 个数两个成员))进行计数,但是时间复杂度为O(n*n),空间复杂度为O(n+1),面试官让我改进。 B. 接着我在纸转载 2010-11-14 19:03:00 · 1244 阅读 · 0 评论 -
设计模式 单一职责原则SRP
设计模式 单一职责原则 SRP原创 2010-09-23 23:35:00 · 1143 阅读 · 0 评论 -
堆的实现,提供 min_heap and max_heap功能
主要完成维护一个min-heap or max-heap,如果push的个数超过heap的大小,则进行替换,依赖于compare函数。其中min-heap需要定义 return a b在空间不够的情况下,min-heap保留最大的k个元素,max-heap相反。code:templateclass LessThan{ public: bool operator()(const Type& first, const Type& second) { re原创 2010-09-16 07:34:00 · 3138 阅读 · 0 评论 -
[转载]Android.mk文件语法规范及使用模板
<br />Android.mk文件语法规范及使用模板<br />Android.mk文件语法规范<br />根据eoeandroid上的的连载,进行一些更新、修改和加亮。<br />今天翻译ANDROID-MK.TXT文件(英文原文件在/development/Ndk/Docs/android-mk.txt)<br />Android.mk文件语法规范<br /> <br />Introduction:<br />Android.mk编译文件是用来向Android NDK描述你的C,C++源代码文件的,转载 2010-06-01 20:39:00 · 951 阅读 · 0 评论 -
boost::algorithm学习
boost::algorithm学习#include using namespace std;using namespace boost; 一:大小写转换1 to_upper() 将字符串转为大写 Example: string str1(" hello world! "); to_upper(str1); // str1 == " HELLO WORLD! " 2 to_upper_copy(转载 2009-06-24 14:37:00 · 3089 阅读 · 0 评论 -
深入了解字符集和编码
1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种 状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从 0000000到11111111。 上个世纪60年代,美国制定了一套字符编码,对转载 2009-04-16 10:46:00 · 850 阅读 · 0 评论 -
谈谈Unicode编码
问题一:使用Windows记事本的“另存为”,可以在GBK、Unicode、Unicode big endian和UTF-8这几种编码方式间相互转换。同样是txt文件,Windows是怎样识别编码方式的呢? 我很早前就发现Unicode、Unicode big endian和UTF-8编码的txt文件的开头会多出几个字节,分别是FF、FE(Unicode),FE、FF(Unicod转载 2008-07-16 07:48:00 · 800 阅读 · 0 评论 -
stdarg的一些理解
我们在C语言编程中会遇到一些参数个数可变的函数,例如printf() 这个函数,它的定义是这样的: int printf( const char* format, ...); 它除了有一个参数format固定以外,后面跟的参数的个数和类型是 可变的,例如我们可以有以下不同的调用方法: printf("%d",i); printf("%s",s); printf("the number is %d转载 2008-07-14 08:39:00 · 828 阅读 · 0 评论 -
[topCoder-每日一二题]--[3]
问题描述:描述不准确,把英文描述贴上来 A group of social bugs lives in a circular formation. These bugs are either red or green. Once every minute, a new green bug appears原创 2006-11-02 14:56:00 · 1902 阅读 · 0 评论 -
如何使用# ## ... _ _VA_ARGS_ _
1.#假如希望在字符串中包含宏参数,ANSI C允许这样作,在类函数宏的替换部分,#符号用作一个预处理运算符,它可以把语言符号转化程字符串。例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为字符串化(stringizing).#incldue #define PSQR(x) printf("the square of" #x "is %d./n",(x)*(x))int原创 2006-10-29 11:32:00 · 11682 阅读 · 5 评论 -
今天发现一种 string 与 其他型别之间 的转换方法
今天在做topCoder时,一个函数的返回类型是"No, "+int型的值,也就是string和int 的对接。直接使用str+i是不行的。于是采用了自己常用的方法:char a[100]; sprintf(a,"No, "%d",i);然后输出string(a)后来看了一下其他人的,发现很多人使用如下方法(自己孤陋寡闻):string itos(int x){ostringstrea原创 2006-10-10 09:07:00 · 2170 阅读 · 2 评论 -
判断一个函数里对参数的修改是否对外部产生影响
对于普通的swap(int a,int b)肯定不会对外界产生影响的对于传引用swap(int &a,int &b)对a,b的修改肯定会对外界产生影响现在主要说一下参数为指针 swap(int *a, int *b)或者更复杂的void func(int ***a,int ***b):判断的依据就是如果a为左值的情况下,如果前面有 * ,则修改外界产生影响,否则没有*a=5;有原创 2006-09-26 08:49:00 · 1200 阅读 · 0 评论 -
如何定义自己的迭代器
基本上iterator必须做两件事情1)必须指向某物2)他必须能够遍历任何一个有效区间。一旦定义了operator* operator++通常剩下的行为就比较简单了。必须确定iterator被正确的定义为constant或者mutable。这是常犯的错误之一。不过input iterator不在乎这一点,因为具有只读性。outputIterator具有只写性。对于其他的类型的iterator就不一原创 2006-09-24 15:12:00 · 4721 阅读 · 0 评论 -
整型和字符串的转化
一。整型到字符串 给定的一个整型数,如何转化成字符串?1. int i=255; char a[N]; sprintf(a,"%d",i); ok2. string str= itos(i); string itoa(int i) { string tmp=""; do { char ch = i%10 + 0; tmp.insert(0,&ch);原创 2006-09-24 15:03:00 · 1396 阅读 · 0 评论 -
再一次认识到C函数中参数传递:传值。
一般是以swap(int a,int b)引入的 参数传递时传值得,在函数中对参数的修改不对外界产生影响。于是就引入了传指针和引用。swap(int *a,int *b)传过来的是指向整型值的指针,这样就可以对他指向的内容操作。一向以为自己对这些东西掌握得很好,今天写了一个avl树的程序,关于root在构造函数里面定义为root=NULL,在插入节点时,使用的是递归方法,希望把root原创 2006-09-25 14:55:00 · 1098 阅读 · 0 评论 -
过桥时间最短的算法实现(TopCoder)
问题描述:一群人晚上过桥,每次只能过2个人,并且需要一盏灯。 每个人过桥时间不同。计算最短时间给出是过桥时间如{1,2,5,10},计算出最小时间17首先 1,2 过去 时间 2 1 回来 时间 1 5,10 过去 时间 10 2 回来 时间 2 1,2 过去 时间 2原创 2006-09-22 11:14:00 · 4271 阅读 · 0 评论 -
多关键字排序问题
对含有多个关键字的结构进行排序,比如 vector >, 对于pair中的first按照递增排序,对于first相同的按照second递增排序class cmp{ public: bool operator()(pairp1,pairp2) { return (p1.first == p2.first)?p1.second }};然后调用sort函数就可以了原创 2006-11-02 15:14:00 · 2952 阅读 · 0 评论 -
c++内存分配和管理
感觉这部分比较好,而且非常有用,所以就转过来~4.1 存储 在C和C++中,有三种基本的存储使用区:4.1.1静态存储区(Static Memory)在静态存储区中,连接器(linker)根据程序的需求为对象分配空间。全局变量、静态类成员以及函数中的静态变量都被分配在该区域中。一个在该区域中分配的对象只被构造一次,其生存期一直维持到程序结束。在程序运行的时候其中的地址是固定转载 2006-10-27 16:36:00 · 1035 阅读 · 0 评论 -
红黑树(RBTree)的分析和实现
二叉排序树在查找方面提供了很大的方便,但是对worst-case查找/插入/删除/求最值 得时间复杂度都为O(n).红黑树可以保证在worst-case下查找/插入/删除等的复杂度得到O(lgN)。红黑树保持如下特性:1。节点不是red 就是black2。root为black3。所有的leaf为black4。所有red node 的孩子为black5。任一node通过左子树原创 2006-11-25 16:53:00 · 3677 阅读 · 1 评论 -
数据结构:最小堆/哈希表/二叉树/平衡二叉树/红黑树的意义(什么情况下使用)
接触堆数据结构是在排序里面讲的,空间复杂度O(1),时间复杂度O(NlogN),但是在实践中还是不如快速排序(好像快速排序可以更好的利用硬件特性)。堆的意义就在于:最快的找到最大/最小值,在堆结构中插入一个值重新构造堆结构,取走最大/最下值后重新构造堆结构 其时间复杂度为O(logN),而其他方法最少为O(N).堆实践中用途不在于排序,其主要用在调度算法中,比如优先级调度,每次取优先级最高的,时间原创 2006-11-19 10:27:00 · 4791 阅读 · 1 评论 -
[topCoder-每日一二题]--[6]----动态规划
一个比较有意思的题目,一条街上有很多房子,现在需要对房子染色(红,绿,蓝) ,染色需要耗费资金,染成rgb耗费不同,并且相邻房子的颜色不同,求最少耗费。给出一个vectorhouses,每一个元素形如" 1 100 123",表示染成rgb对应的耗费。 The people of RGB Street h原创 2006-11-16 21:15:00 · 2115 阅读 · 0 评论 -
求结构长度笔试题的分析。
最近作了一些笔试题,发现有一些是求一个结构的大小。做一下总结typedef struct tBit{ short m; char a; char n;}A; typedef struct tBit{ char a; short m; char n;}B; typedef struct tBit{ char n; char a;原创 2006-11-12 11:15:00 · 1471 阅读 · 0 评论 -
关于复杂问题向01两种状态转化的一点看法
昨天做了一个topcoder题目,题目大致就是对一个给定的字符串进行处理。字符串中是R 或者G。对字符串进行处理得到S,如果S不满足,则对S处理。我使用普通的做法,重新定义一个字符串T,保存对S进行处理的结果,如果T不满足,S=T重新计算。(http://blog.csdn.net/hxxiaopei/archive/2006/11/02/1362791.aspx)看了一下,有个大虾使用0原创 2006-11-02 11:26:00 · 1114 阅读 · 0 评论 -
TopCoder每日一二题--2
问题: 给定一个时间格式 ""hh:mm XM, DAY n" =>小时:分钟 AM(PM) DAY 数字初始时间 08:00 AM, DAY 1,函数输入为vector,每一个字符串都是按照固定格式的时间。12:00 AM 表示的是00:0012:00 PM表示的就是中午计算没个时间于初始时间的差值(分钟),返回平均值(四舍五入)问题的关键就如何把字符串里的时间分离出来(http://原创 2006-10-29 09:04:00 · 1495 阅读 · 0 评论 -
TopCoder每日一二题--1
问题:一个pan里面最多能放m个饼,饼的每面需要烤5分钟(两面可以有时间间隔)。现在有n个饼,最短需要多长时间?分析 :m=2, n=3(a b c),需要15分钟 ,把两个饼a,b放到pan里,5分钟后取出一个(比如a),把c放进去,然后把b翻过来,5分钟后a OK,把b放进来,c翻过来,5分钟后 b c OK程序:using namespace std;class Fryi原创 2006-10-28 08:46:00 · 1069 阅读 · 0 评论 -
输入法之核心词典构建
拼音输入法输出的候选分成两个部分,系统词以及短句(智能组词),智能组词是通过model以及解码弄出来的,后续再说。系统词就是那些常用的词(词组)收录到词典中,用户的输入和词典中的词match时,直接吐出来,而不需要解码获得。系统词以及对应的rank(score)对输入法的体验很大,毕竟大多数用户还是继续短词输入。系统词包含几个部分:1.基础词2.高频短串3.原创 2014-06-10 14:26:10 · 8134 阅读 · 0 评论