随笔分类 - C++
摘要:在stl中map,set内部都是使用相同的红黑树实现,map对应模板参数key_type,mapped_type,而set对应模板参数没有mapped_type 两者都支持insert操作 pair insert(const value_type& value); 对于map typedef pair value_type; 对于set typdef key_type...
阅读全文
摘要:这个可以参考effective c++http://www.cppblog.com/tiandejian/archive/2011/12/25/epp_35.html 这里给出一个测试程序 对比了3种不同实现方案的效率,这三种方案的效果是等价的 1.使用虚函数 2.使用std::function3....
阅读全文
摘要:介绍Expression template,本文是一个学习笔记,主要参考 mashadow项目关于表达式模板的教程 https://github.com/dmlc/mshadow/tree/master/guide/exp-template 类似matlab形式的向量操作如 VEC0 = VEC1 + VEC2 + VEC3存在效率问题 class Vec { public: Vec(...
阅读全文
摘要:c++11 中类型初始更加方便 比如 vector vec = {1,2,3}; vector vec{1,2,3}; map m = {{ "help", 3 }, {"good", 4}}; 另外的一些常用示例,包括自己定义的类如何接受list初始化 //struct class 在c++11中都支持更简单的初始化 可以不用手写初始化函数 class Node { public: ...
阅读全文
摘要:这个特性很赞,直接给例子吧,假如我要设计一个类,CachedFetcher内部可能使用std::map也可能使用std::unordered_map,也可能是其它的map,怎么设计呢?没有C++11变长模板之前这很费劲。。 因为map的模板参数可不是只有key,value两个啊,还有一些有默认参数的template参数。。。 template class _Map = std::unorde...
阅读全文
摘要:超赞的线程安全的初始化
static plsa::PLSAModel& model()
{
static plsa::PLSAModel _model = ([&]() { plsa::PLSAModel _model;
string modelPath = "./data/plsa.model/pzw.idx";
PSCONF(modelPath, "PlsaTopic");
_model.L...
阅读全文
摘要:测试环境gcc4.8.2 iterator find ( const key_type& k );
const_iterator find ( const key_type& k ) const; Unordered_map有两个对应的find函数 我推断第二个是安全的,第一个经过实测不是线程安全 auto iter = _map.find(key)
在openmp多线程环境...
阅读全文
摘要:暂时使用boost 序列化, 目前我的测试基本都ok 只是对于c++11 shared ptr 没有测试成功,只能手工写下shared ptr 部分的序列化,也就是目前我对指针都不直接序列化,自己管理,例如下面样子
Load_(modelFile); //model直接序列化
string normalizerName = read_file(OBJ_NAME_PATH(_normalizer)...
阅读全文
摘要:引言 最近在找C++的数值库,最后终于找到一个近乎完美的eigen,接口优雅,使用方便,速度快,文档详尽。。。 几乎没有缺点,缺点可能是库的设计者要辛苦一些。。。。另外稀疏矩阵的部分还在开发阶段没有完全成熟。 里面提到了矩阵相乘相加等等可以直接用 D =A * B *C 这样写,而不是类似boost::ublas(这个库的好处是在boost下,其它的比eigen差远了。。个人觉得)要写成 prod(A,B)。 为什么ublas不用运算符号重载呢? 原因是效率问题吧,当然A*B的写法更优雅更类似matlab语法了,那么在eigen中采用了lazy evaluation来避免效率问题。 考虑两个.
阅读全文
摘要:一个小应用,show下代码,为了推荐下我非常喜欢的glog,gflag:)感谢google 它们让我的生活更轻松:)另外读取数据库用otl相当方便,我用otl封装了下写了一个DBReader,这样处理数据库基本就和处理文本一样了完全相同的接口,完全屏蔽了数据库的操作方便了很多。 /** * ==================================================...
阅读全文
摘要:作者slostice http://blog.csdn.net/Solstice/archive/2008/10/13/3066268.aspx 转者注:) 我也是不喜欢继承和虚函数的,耦合度太大,我喜欢STL,boost,CGAL风格的C++。我经常使用的是template, 仿函数,用编译期的多态替代虚函数(见effective c++ 条款41 了解隐式接口和编译期多态)。 例如Example<WriteFunc1,Writer2> example;example.process();这真是C++的伟大灵活之处, m_func可以是任何一个函数对象只要其内部定义了opera
阅读全文
摘要:原文http://www.cppblog.com/walkspeed/archive/2007/07/20/28448.html当我们使用函数时习惯于C函数的格式,即如下形式resulttype funname( arglist );返回值类型 函数名( 参数列表 );在Boost.Function中,我们可以方便的定义定义函数对象。不过在定义用来表示类成员函数的函数对象时第一个参数是类指针。而且在调用时,要传入一个类实例的指针。这样用起来并不是很方便,因为调用者要知道类实例。这实际上没有实现解耦。而解耦是我们使用回调或委托设计的一个目标。为了解决这个问题,我们要使用Boost.Bind库Bo
阅读全文
摘要:最近用boost::math库,发现会和我以前的程序冲突。比如我的程序如果用到 #include<tr1/unordered_map> 等等std::tr1名字域下的东西。。。 google了下,原因是boost::tr1设计初衷是为了在你的系统没有std::tr1标准库实现的情况下让你仍然可以在程序中使用std::tr1::unordered_map, std::tr1::tuple等东东,当然了这是一个work around,也就是你其实还是用的boost::tuple等等 只是你的代码写的时候可以写std::tr1::tuple。 比如boost的math库的一个分布函数的
阅读全文
摘要:如果你经常使用STL算法,那么你会注意到函数对象的传递都是传值的形式如下面的sort, for_each,_Compare __comp 而不是 _Compare& __comp传递引用。这里你是否会疑惑呢,为什么要用传值的形式而不用传递引用呢,毕竟函数对象区别于函数指针的一大优点是自身可以带有状态变量。如下面这个函数对象它是带有一个状态变量a的,其实可以带有更复杂更占内存的变量更多的变量,那么传值的方式肯定有很大的拷贝代价了。现在我有一个应用,读取数据库中的词并统计热门词,现在问题来了,见下面那么言归正传,为什么STL要是使用传值的方式呢??用于传递函数对象呢??? 我觉得是为了下面
阅读全文
摘要:written by pku_goldenlock at qq.com 引言: 我喜欢C++的速度,我喜欢python的简洁,我相信只用C++,python就可以解决99.99%的问题,那么如何让它们交互呢,这里仅说明如何将C++的代码接口封装使得python可以调用c++。一个简单的应用我写了一个分词器,我希望能通过网页形式展示给别人,我觉得用django做这这件事情比用C++些XML更灵活方便。那么如何让python代码能够调用我的分词器呢?我在前面的文章介绍过boost.python使得C++中方便调用python,boost.python入门教程 ----python 嵌入c++ py
阅读全文
摘要:一直想 学习下C++开源引擎的源代码,比较了下xapian,lemur,firtex,最终还是决定从xapian开始,以后有时间再看下lemur。 选择xapian是因为xapian的代码可读性更强,更接近现代C++风格,用户端代码很少需要直接和指针打交道而看了下lemur示例代码到处都是指针不太爽,呵呵,还是了解不多吧,总之从xapian开始吧。 xapian的索引建立 xapian提供多种不同的索引方式比如in memory, flnt格式的等待(具体没有仔细看)。 在xapian中提供一个基类DataBase表示索引数据库,WriteableDataBase继承自DataBase. X
阅读全文
摘要:作者:Scott Meyers and Andrei Alexandrescu 译者:ChengHuige at gmail.com1.引言详尽的讨论了volatile语义以及如何用C++实现线程安全的Singleton模式。主要参考Scott Meyers and Andrei Alexandrescu写的“C++ and the Perils of Double-Checked ...
阅读全文
摘要:堆是常用的数据结构,经常用于实现优先队列中,huffman编码中的就用到了优先队列。本质上就是用数组实现的完全二叉树保证父节点的关键码都大于或者等于其子节点的关键码(最大堆,反过来是最小堆),下图是一个最大堆示意。那么在STL中有相应的堆算法,如判断一个序列是否为堆__is_heap,将一个序列建立为堆make_heap,向堆中插入元素push_heap,删除元素pop_heap,对堆排序等等so...
阅读全文
摘要:这个问题是在我尝试利用pygraphviz嵌入我的C++代码绘制二叉树的时候发现的.找了半天资料,这里我把几种常用的C++调用PYTHON利用 boost.python 的方法作一个总结,希望能让别人少走弯路,因为有些内容还找不到中文文档,虽然都不难但是开始摸索还是费时间的. 我个人认为boost.python真的是非常的COOL,基本上不需要去学习那个看了就头大用着也不方便的python c ...
阅读全文
摘要:boost.python 中 python 嵌入c++ 部分,网上找到的中文资料似乎都有些过时了,如 boost.python学习笔记 http://edyfox.codecarver.org/html/boost_python.html在boost.python版本2中,提供更加简洁易用的接口,我们可以使用从而代替原始的PyRun_SimpleString等等python c 转换api.关于p...
阅读全文

浙公网安备 33010602011771号