C/C++
文章平均质量分 62
奔跑的小河
从博客中来,到博客中去。
展开
-
C/C++代码优化的27条建议
这篇文章是极客上阅读量很大的一篇文章,通过博友的翻译,加上我的转载和小改动,以便经常查看,方便以后进行代码优化时拿来做参考。1. 记住阿姆达尔定律· funccost是函数func运行时间百分比,funcspeedup是你优化函数的运行的系数。· 所以,如果你优化了函数TriangleIntersect执行40%的运行时间,使它运行快了近两倍,而你的转载 2015-04-29 12:38:41 · 522 阅读 · 0 评论 -
仰视源码,实现strlen
最近对于C++源码特别感兴趣,读源码,然后根据源码实现一遍,对我帮助蛮大的。下面给出我们天天用的strlen的实现:普通实现size_t strlen1(const char* str){ const char* tmp = str; size_t rtn = 0; while(tmp++ != '\0') rtn++; return rtn;}源码实现size_t原创 2015-07-19 20:27:16 · 611 阅读 · 1 评论 -
仰视源码,实现strcmp
//这是系统库的实现int strcmp(const char* src, const char* dest){ int rtn = 0; while(!(rtn = *(unsigned char*)src - *(unsigned char*)dest) && *dest) { ++src; ++dest; } if (rtn < 0) { rtn = -1;原创 2015-06-27 10:37:34 · 720 阅读 · 0 评论 -
String系列——运算符重载
本节实现所有运算符的重载。意图很简单,对于运算符重载不清楚的可以查看相关运算符重载的写法。原创 2015-07-31 10:26:06 · 2203 阅读 · 0 评论 -
C/C++易错难点笔记01
C++是一门神奇的语言,很多时候你对底层不熟悉,很难知道某些情况下的结果,下面是我不断积累的疑惑点,这里将其记录下来。原创 2015-08-21 20:20:17 · 815 阅读 · 0 评论 -
C/C++易错难点笔记03
在做C++各类题目的过程中,有很多题目看似,却有点难(对于我来说~~),所以我将这些题目积累慢慢积累下来,并记录。原创 2015-09-08 21:47:14 · 997 阅读 · 0 评论 -
String系列——基础实现
本节实现一个简单的string类,以方便后面的string系列能够顺利进行,设计string系列旨在学习和理解一些底层技术,比如COW、内存池等等,另一方面学习语言的基本功,同时也可以加深对string类的理解。原创 2015-07-31 10:22:59 · 612 阅读 · 0 评论 -
仰视源码,实现memmove
在我之前博客中写过一个内存复制函数memcopy(http://blog.csdn.net/z702143700/article/details/46628149),是根据源码修改而来,但是这个函数包括源码中都没有考虑一个问题,就是当memTo和memFrom有重叠的情况。 今天就根据源码实现memmove函数,感受下底层源码的极致实现。原创 2015-07-28 16:45:27 · 9162 阅读 · 7 评论 -
C/C++易错难点笔记02
C++有很多基础但是,又容易出错的地方,也有很多我们 没有关注的地方,这里慢慢总结积累,记录下来。原创 2015-08-21 17:06:21 · 821 阅读 · 0 评论 -
String系列——空间配置器
根据STL源码剖析中的配置器原理,自己整理,并按照自己的理解进行了讲述。原创 2015-12-05 19:25:40 · 535 阅读 · 0 评论 -
基于auto_ptr源码的智能指针实现
智能指针某些情况下能够避免内存泄露,这里我做了一次重复制造轮子,目的是为了深入理解智能指针的实现原理。这里只实现了auto_point,根据原理我们不难推出其他智能指针的实现方式。原创 2015-12-29 16:19:57 · 540 阅读 · 0 评论 -
string系列——StringBuilder实现
StringBuilder关键的实现在于解决多次字符串操作后的内存碎片问题,下面的代码只是一个玩具,内存增长方式可以自定义,这里我使用的是二倍增长,你也可以4倍增长。原创 2015-07-31 10:32:40 · 952 阅读 · 0 评论 -
String系列——写时复制COW
实现写时复制技术,这其中包含了引用技术原理。原创 2015-07-31 10:27:36 · 882 阅读 · 0 评论 -
String系列——内存池技术
前言:阅读STL源码中内存池的实现,感触颇深,但又不知如何描述,STL源码剖析中已经描述的非常清楚了。所以这里我把其源码整理了一下,去除了多线程,方便阅读其实现原理。原创 2015-07-31 10:30:19 · 575 阅读 · 0 评论 -
仰视源,实现strcat
实现库函数strcat字符串的连接,给出核心代码,至于安全性,就不考虑了。char* strcat(char* dest, const char* src){ char* crtn = dest; while(*dest++); dest--; while((*dest++ = *src++) != '\0'); return crtn;}还有更简单的做法吗?原创 2015-06-28 10:31:47 · 574 阅读 · 0 评论 -
仰视源码,实现memcpy
C++实现内存的复制通常我们使用深复制就是通过内存复制实现的,但是对象的复制涉及到基类派生类及其相关类的问题,这里不讨论。目的为了能够明白内存复制的底层实现。void* memcpy(void* memTo, void* memFrom, size_t size){ assert(memTo != NULL && memFrom != NULL); char* temFrom =原创 2015-06-24 22:51:46 · 2073 阅读 · 0 评论 -
C++类库开发之导出类设计原则
对于类库开发过程中导出类的开发规范问题。C/C++开发的DLL当初是作为函数级共享库设计的,并不能真正提供一个类所必需的信息。类层上的程序复用只有Java和C#生成的类文件才能做到。所以,当我们在用C++开发类库时经原创 2015-05-26 23:03:08 · 2040 阅读 · 2 评论 -
高效编程——C++测试代码运行时间方法
C++测试代码运行时间方法方法一最常用的执行时间测试方法,利用clock函数,精确度能达到ms级。原创 2015-05-30 22:21:50 · 3720 阅读 · 0 评论 -
char* 类型使用总结
对于字符类型的指针真的有很多很多要注意的地方,而且他是String,CString等各种字符串相互转换的桥梁。使用上稍不注意就会出错。1.初始化char* pstr = "hello world.";这是一个指向字符串常量的指针,也就是说hello wrold.是不能被修改的。因为它存储在程序内存中的常量区。很多时候不注意就把pstr当做参数传递了。所以我们初始化需要改变的原创 2015-06-24 22:58:33 · 14643 阅读 · 3 评论 -
String、CString、char*、int、float、double相互转换
不同数据类型之间的转换可以说用得特别频繁,我也是经常查,索性就将其全部整理出来。一、String和int、float、double的转换 源代码StringAndNumberConvertor:-----------------------------1. Stringstream使用很简单,也很方便,个人比较喜欢的用法,直接上代码: template原创 2015-06-08 19:24:37 · 1100 阅读 · 0 评论 -
C/C++中常用的字符串处理函数和内存字符串函数
一、 字符处理函数1. 字符处理函数:int isdigit(int ch) ;//是否为数字,即ch是否是0-9中的字符int isxdigit(int ch) ;//是否为十六进制数字,即ch是否是0-9 a-z A-Z 中的字符int isalpha(int ch) ;//是否为字母int isalnum(int ch) ;原创 2015-07-09 16:02:28 · 1449 阅读 · 0 评论 -
深入理解extern用法
一、 extern做变量声明l 声明extern关键字的全局变量和函数可以使得它们能够跨文件被访问。我们一般把所有的全局变量和全局函数的实现都放在一个*.cpp文件里面,然后用一个同名的*.h文件包含所有的函数和变量的声明。如:/*Demo.h*/#pragma onceextern inta;extern intb;intadd(inta,intb);/*Demo.cpp原创 2015-07-08 16:36:44 · 59546 阅读 · 3 评论 -
高效实现整型数字转字符串int2str
将数字转换成字符串有很多方法,现在给出一种高效的实现方法。开阔眼界。char* int2str(unsigned int values){ const char digits[11] = "0123456789"; char* crtn = new char[len+1]; crtn += len; *crtn = '\0'; do原创 2015-07-01 22:31:07 · 3286 阅读 · 0 评论 -
删除字符串中出现次数最少的字符
在公交车上看一博客实现删除字符串中出现次数最少的字符,觉得里面使用数组来作为hash非常好,所以我就自己实现一遍。要求:实现删除一个字符串中出现次数最少的字符,输出删除后的字符,要求安装原来顺序输出。如果出现次数一样,则都删除。例如:abcabc 则全部删除,输出Null。 aabbccddd 则输出 ddd代码:char* DeleteLeastStri原创 2015-07-01 17:34:33 · 869 阅读 · 0 评论 -
C++类库开发详解
前言:这是一篇总结性的文章,需要有一点C++和dll基本知识的基础,在网上查阅了很多资料感觉没有一篇详细、具体、全面的dll开发介绍,我这是根据最近项目和网上资料整理出来的,并附带实例的一个总结性的文章(由于篇幅较长故不附带源码解释)。另外,个人愚昧地认为以后C++的开发会更多地面向库的开发,所以学会库的开发必不可少。原创 2015-05-25 22:57:46 · 9411 阅读 · 4 评论 -
仰视源码,实现strcpy
编程实现字符串的拷贝,不能用库函数。一般的初学者或许能写出来,但是要写的很完美那就需要基本功了。char* strcpy(char* strDest, const char* strSrc){ if (strDest == NULL || strSrc == NULL) { return NULL; } char* dest = strDest; while((*dest+原创 2015-06-27 10:17:18 · 660 阅读 · 0 评论 -
仰视源码,实现memset
——来看看源码的权威 memset主要用于为新申请的内存进行初始化,它是对较大的结构体和数组进行清零操作的一种最快方法。 函数原型:void *memset(void *s, int ch, size_t n); 函数解释:将s中前n个字节用ch填充,并返回s。原创 2015-07-28 22:19:51 · 3958 阅读 · 1 评论 -
仰视源码,实现strstr和find
字符串查找两种情况,查找返回子字符串的指针位置和在字符串中的位置。strstr和find的实现是基于源码来实现的,然而字符串匹配方法依然可以用在字符串查找上,字符串匹配方法很多,但是源码却采用这种最为直观的方式来实现,是它的一个权衡。比起我们的暴力查找,它还是很高效的,所以,学习学习。1.查找字符串src中的子串,若成功返回子串在src中的起始指针。const char* strstr原创 2015-06-28 10:44:30 · 949 阅读 · 0 评论 -
C++小结
作为一个C++菜鸟,我将我这半年学习C++的一点小心得分享出来。这些都是零散的一些,一条条地看就可以。1.C++/CLI是ISO/ANSI C++的扩展。同时visual C++可以开发这两种不同的C++程序。C++/CLI:扩充版本定义的,在CLR中运行的程序。又叫做CLR程序。ISO/ANSI C++:使用ISO/ANSI标准定义的。又叫做,本地C++程序CLI Com原创 2015-03-30 21:48:32 · 525 阅读 · 0 评论