C++
文章平均质量分 66
jarodpku
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
关于几种std::vector访问方法的效率
#define _SECURE_SCL 0#include boost/foreach.hpp>#include list>#include vector>#include algorithm>#include cstdlib>#include time.h>#include stdio.h>using namespace std;templatetypename Container原创 2007-08-13 00:29:00 · 3326 阅读 · 0 评论 -
基于double lock的多线程安全的Singleton实现要点
老问题了,直接上代码(C#)class Singleton{ private static volatile bool beInitialized= false; private static object thisLock = new object(); private static Singleton instance; Singleton GetInstance() { if (!beInitialized) { lock(thisLock)原创 2010-12-08 21:07:00 · 1810 阅读 · 0 评论 -
独一无二的C++模板 (1)
断断续续地看了《C++Templates》很长时间,在叹服于模板的神奇之余,也不得不承认这是一块充满陷阱的湿地。每次想要动手神奇一把,都会被某编译错误给无情地挡回;看英文似的,水平不够,只能“读得懂,写不出”;成了饥饿的小白鼠,远处放着奶酪,近处却是一鼠夹。此次总结,希望把最近的模板实践都剖析出要点,避免再犯相同的错误。 模板的魅力 当前,对于多数C++程序员来说,模板常常意味着类原创 2009-04-04 20:07:00 · 2948 阅读 · 2 评论 -
最简单的内存池-原理与实现
内存池的主要作用,简单地说来,便是提高内存的使用效率。堆内存的申请与释放(new/delete及malloc/free),涉及复杂的内存分配算法,相比由简单CPU指令支持的栈内存的申请与释放,则是慢上了数量级。另一方面,栈的大小是有限制的,在需要大量内存的操作时,堆的使用是必要的。当然,频繁地申请与释放堆内存,效率是很低的,这也就是内存池出现的原因。类似std::vector容器,在向vect原创 2009-03-15 12:41:00 · 4683 阅读 · 2 评论 -
一个数学游戏
一个古老的数学游戏,很早就知道了,但一直编程没编正确。今天终于正确了。有1、2、3、4、5、6这6种牌,每种牌有3张。开始总点和记为24,然后两个人轮流选一张牌,然后从总点和里减去牌面值,直到总点和非正。谁取完牌后,总点和为0,则胜;若为负,则败。 例如:24A:321B:615A:114B:212A:57B:34A:4A胜原创 2009-02-08 12:53:00 · 1065 阅读 · 0 评论 -
最长递增子序列
O(N^2)的代码很容易写。但O(N logN)的代码就要想好办天了。关键是其实一些数学的东西,没有提示,难想明白。 #include const int inf= 1000;int main() { const int N = 12; const int A[N] = { 2, 3, 1, 9, 0, 2, 3, 5, 4, 8, 2,3 }; int原创 2009-02-02 00:36:00 · 759 阅读 · 0 评论 -
几种C++编译器的性能比较
现在市面上,主流的C/C++编译器包括M$的CL、gcc、Intel的icl、PGI的pgcc及Codegear的bcc(原来属于Borland公司)。Windows上使用最多的自然是cl,而在更广阔的平台上,gcc则是C/C++编译器的首选。但要提到能力优化,排名就未必与它们的市场占有率一致了。 今天一时兴起,便做了一个各编译器数值性能的比较。测试的代码是一个求积分的程序,来源于inte原创 2008-11-18 18:50:00 · 4131 阅读 · 1 评论 -
用cl与icl的编译生成.lib与.dll
cl.exe 要生成 .lib 文件时,先要用 /c 编译成 .obj 文件。再用lib.exe编译成.lib文件,如 cl /c alib.cpplib alib.obj /out:alib.lib icl 生成.lib 文件,也是通过/c命令,不过,对应的链接器为xilink。用法相似。 cl生成.dll文件与icl不一样。cl用/dll,而icl用/LD选项原创 2008-11-18 12:23:00 · 2813 阅读 · 0 评论 -
读了两本关于C++程序性能优化的书
最近在耐着性子,看了大半的《C++应用程序性能优化》和《Efficient C++ Performance Programming Techniques》。总体感觉,虽然内容不一样,但前者就像是后者的中文化版及针对VC2003的版本。想来汉语本应言简意赅,但前者写得似乎有些啰嗦,看着反不如后者顺畅。一直用C++,大部分时间写数值计算的程序,所以C++的性能常常挂在心中。各种语言的性能比较,各原创 2008-02-04 18:55:00 · 5486 阅读 · 0 评论 -
我看VC2005中的返回值优化
一直以来,我都认为C++中,返回大对象或多个对象就是一场恶梦:额外的开销太多,对于原生类型还可以承受,但对大对象来说,就严重地影响效率。所以STL的容器再方便,那也仅限于操作int,double这些类型,换作是操作自定义类型,一不小心就会掉近了陷阱。不过这方面还好,有boost的指针类型对象容器可以利用,是一种比较好的解决方案。另一方面,返回值的处理也不能都像Blitz::Array操作那样,可以原创 2007-08-22 00:00:00 · 1513 阅读 · 2 评论 -
Common Function Objects & Function Adapters
函数对象是一个好用的东西(Function Object),它不仅具有自己的状态(可以当作算法参数), 还在一般情况下可以内联获得更好的性能。当然,有些小的函数为获得较好的性能,是要经常被改写为函数对象的,如vectorint> v(10);//....sort(v, IntLess); struct IntLess { bool operator ()(const int原创 2007-08-11 19:00:00 · 963 阅读 · 0 评论 -
boost/uBLAS,Primal Perceptron Algorithm,重定向
今天写了一小段代码,一是试用一个uBLAS,二是学习一下Preceptron Algorithm的最原始形式,三是意外用了一下file重定向到stdin的功能。#include stdio.h>#include boost/numeric/ublas/vector.hpp>#include boost/numeric/ublas/matrix.hpp>#include boost/n原创 2007-08-13 16:21:00 · 2019 阅读 · 0 评论 -
std::vector 插入数组的简洁代码
用了这么长时间的STL,却还有很多不知道的地方呢:int a[3] = ...{1,2,3};vectorint> v(a,a+3);v.insert(v.end(),a,a+3);原创 2007-08-09 22:41:00 · 9399 阅读 · 0 评论
分享