C/C++
文章平均质量分 70
五道口纳什
wx公众号/B站:五道口纳什
展开
-
C++伪(pseudo)随机数生成及简单应用
两个主要函数两个简单应用 如果设定种子值,matlab:rng(),c++:srand(unsignd),则最终得到的随机数,无论是一个还是一个vector,都是固定的,可见有一种内部的机制(mechanism)保证了随机数的生成,该机制以rng或者srand的参数为参数,可见随机数并不真正“随机”,是为伪随机数。两个主要函数属于<cstdlib>标准库,该库又被包含在<iostream>中原创 2015-09-28 17:49:45 · 2522 阅读 · 0 评论 -
从随机数生成到随机采样的C++实现
随机数的妙用:[上回书](http://blog.csdn.net/lanchunhui/article/details/49123823)说到的关于用蒙特卡洛方法进行一些数值计算(比如pi的逼近、特殊几何图像面积(存在解析解)的计算),都还是随机数较为间接的应用(也就是我所说的,将随机数转换为一种均匀分布的概率表现),这节我们考察随机数更为直接的应用,那就是随机采样。原创 2015-10-17 10:56:50 · 6575 阅读 · 0 评论 -
BP神经网络从理论到应用(一):C++实现
为什么基于数学原理的程序会那么难以实现?因为缺乏一定的训练。事实上,基于数学定理的算法并不比「数据结构与算法」的算法复杂更多,它们往往并不需要高级的数据结构作为支撑,也不要高级的语法特性完成某一功能,算法所赖以实现的基石仍是基本的循环分判断等机制。为什么基于数学原理的程序会那么难以阅读?因为缺乏程序语言向数学公式的转换的训练,还是缺乏训练。原创 2015-09-30 18:31:33 · 2258 阅读 · 1 评论 -
C++基础——bitset与string的相互转化
bitset类模板提供了非常直接的接口进行与string类型数据的转换。然而一些需要注意的细节又是非常繁琐。具体如何繁琐,以及如何化繁为简,且看下文分解。原创 2015-11-04 23:25:23 · 16518 阅读 · 0 评论 -
C++基础——简单而强大的bitset
本文covers:1. 如何理解bitset的真正内涵?2. bitset存在哪些构造函数,成员方法?3. 一些简单应用。原创 2015-11-04 21:51:46 · 11800 阅读 · 0 评论 -
线性方程组(A是上三角矩阵时)的C++求解
将矩阵$A$通过一系列的线性变换转换为三角矩阵(上三角:upper triangular,下三角:lower triangular),然后便可轻松的求解联立线性方程组。这也是诸如LU分解存在的理由。原创 2015-10-21 10:17:24 · 3550 阅读 · 0 评论 -
C++基础——bitset与vector<bool>
bitset有哪些缺陷?bitset与vector<bool>异同点是什么?在某些情况下如何实现两者的互换?原创 2015-11-04 23:47:31 · 2466 阅读 · 0 评论 -
C++基础——对函数模板的类型推导的补充
这里忽然想到一个问题:template<typename T>void foo(){ T x = T();}template<typename T>void foo2(T x){ ++x;}template<typename T1, typename T2>void foo3(T1 x){}int main(int, char**){ foo<int>();原创 2015-11-07 11:01:23 · 1130 阅读 · 0 评论 -
C++基础——关于模板的技巧性基础知识(typename、成员模板、模板的模板参数)
关键字typename的另一种用法将成员函数和嵌套类也定义成模板模板的模板参数(template template parameters)原创 2015-11-05 10:41:00 · 3520 阅读 · 0 评论 -
C++基础——使用字符串作为函数模板的实参
在const char* s = "hello";s的类型是const char*,"hello"的类型是const char[6]是数组类型,也就是与"hell"(const char[5])具有不同的数据类型。这一点在函数模板(以字符串为参数)的设计中,显得尤为重要。template<typename T>inline const T& max(const T& x, const T& y)原创 2015-11-07 15:19:32 · 4868 阅读 · 0 评论 -
C++基础——模板的0初始化
1、基本类型的默认构造和类类型的默认构造有和不同?2、 如何在一个模板内部实现对二者不加区分的构造?原创 2015-11-07 11:00:33 · 3414 阅读 · 0 评论 -
C++基础——有关引用的问题
我们还是从具体的代码出发,那种陈腐的传值、传指针、传引用之间的区别不再赘述,任何一本C语言的书中都有详细的例子:int x = 10, y = 20;int& refX = x; // 引用必须依附对象而存在,必须与合法的内存单元相关联 // 引用(refX)是变量(x)的别名(alias) // 对引用(原创 2015-11-09 15:52:07 · 1206 阅读 · 0 评论 -
C++基础::语法特性::函数重写(override)与协变返回类型(covariant return type)
本文covers:1. 函数重载、重写、重定义之间的区别是什么?2. 协变返回类型与函数重载具有怎么的联系?3. C++引入协变返回类型的真正意义是什么?原创 2015-11-10 11:02:20 · 5650 阅读 · 0 评论 -
C++基础::自制异常定位器
我们经常会有这样的需求,异常或错误(又或者内存泄露时)发生时,如何进行快速定位,定位到文件一级、定位到函数一级、乃至定位到异常出现的行号一级。如此高大上的需求,只需要了解C++ preprocessor内置的一些宏定义如__FILE__(文件名),__LINE__(行号),以及boost\current_function.hpp 中的BOOST_CURRENT_FUNCTION(函数名),将这些宏定原创 2015-11-10 12:59:39 · 1598 阅读 · 1 评论 -
C++基础::为什么不能cout一个string?
为什么不能cout一个string?为什么不能ostringstream声明一个字符串输出流?原创 2015-11-10 11:52:54 · 33497 阅读 · 3 评论 -
C++基础::关于区间端点的问题
在STL的环境中,我们知道区间都是左闭右开的区间。这一点很重要,然而仅仅知道这些还是不够的。当自加运算和循环结合,要特别小心:比如返回容器中某一元素所在的索引,vector<string> values{"hello", "world", "inside", "zhang"};vector<string>::const_iterator pos = values.begin();while (*p原创 2015-11-10 21:52:18 · 1426 阅读 · 0 评论 -
C++基础:: struct vs class
在C++的语法体系之下,struct与class并无重大的区别。很多时候,二者的选择都是一种约定俗成的规范。原创 2015-11-13 10:06:57 · 1051 阅读 · 0 评论 -
C++基础::一些接口汇总
类型转换 ostringstream.str(); // 转换为string类型 string.c_str(); // 转换为const char*类型 #include <sstream>#include <string>int main(int, char*原创 2015-11-10 14:49:34 · 1032 阅读 · 0 评论 -
C++基础::变量模板(variable template)
既然允许C++模板类(class template)的存在,允许C++函数模板(function template)的存在,也应当允许变量模板(variable template)的存在。引入变量模板,标准C++14(C++11是C++14的一个subset子集,)的一个新的语法特性。C++新标准引入变量模板的主要目的是为了简化定义(simplify definitions)以及对模板化常量(pa原创 2015-11-14 13:24:26 · 15697 阅读 · 2 评论 -
从伪随机数的产生到高大上的蒙特卡洛算法(C语言实现)
通过这篇短文想说明两个道理:1. 看似高大上、神秘兮兮的算法,都是paper tiger;2. 计算机的计算方式(动辄几Ghz的主频)简直就是为蒙特卡洛度身定做;原创 2015-10-14 13:14:21 · 16432 阅读 · 3 评论 -
点乘和叉乘及其物理意义(C++STL实现)
一些错误观念的澄清,比如数学意义上的点积和叉积并不对应matlab程序中的.*(按位相乘)和*(矩阵乘法)内积的物理意义一种向量到标量的映射两向量的夹角的计算两向量是否正交的判断两向量的相似性(similarity)的度量叉积的意义如何使用C++语言(STL容器,运算符重载):表示向量计算内积计算叉积计算模长计算两向量的夹角计算点到直线的距离prerequisites内积(i原创 2015-11-14 20:42:35 · 36638 阅读 · 3 评论 -
C++::My Effective C++
苔花如米小,也学牡丹开。为局部变量初始化是一个好的习惯为只有“一条语句”的代码段使用大括号括起来#define FAIL(msg)\ std::ostringsteam oss;\ oss << msg;\ throw exception(oss.str());if (y == 0) FAIL("除数不能为0")这里的FAIL("除数不能为0")看似是一条语句其实是原创 2015-11-10 22:17:26 · 919 阅读 · 0 评论 -
STL::pair
1. pair的源码2. 如何实现pair的pair3. pair与容器的关系4. 玩转pair原创 2015-11-11 16:45:52 · 1213 阅读 · 0 评论 -
C++基础::非类型模板参数在STL中的应用
本文covers:STL以及工程实践中涉及到的关于非类型模板参数的应用案例。原创 2015-11-16 10:28:07 · 1061 阅读 · 0 评论 -
C++14::lambda函数的类型
问题auto 自动类型推导关键字隐去了一切有关对象类型的信息,通过typeid关键字我们可查阅一般对象(甚至是函数指针)的类型信息。auto i = 42;typeid(i).name() // intdouble f() { return 0.;}auto l = f;cout << typeid(l).name() << endl; // do原创 2015-11-15 13:17:48 · 5525 阅读 · 0 评论 -
C++11::遍历tuple中的元素
pair对象的成员遍历十分简单,如何进行tuple成员的遍历呢?对tuple的成员进行遍历时,存在哪些常见的错误或者陷阱?又为什么会牵涉到c++模板的根本设计问题?如何对tuple进行索引?原创 2015-11-16 16:43:57 · 8799 阅读 · 5 评论 -
C++STL::两种方式实现STL容器的reference语义
使用智能指针使用reference wrapper原创 2015-11-17 09:44:47 · 1817 阅读 · 0 评论 -
C++标准库::拾遗
std::min({...});以及std::max({}),std::minmax({});等可接受initializer_list的辅助函数(Auxiliary Functions)。auto minVal = std::min({0, 1, 2});// std::min源码template<class _Ty> inline _Ty (min)(initializer_list<_原创 2015-11-23 09:17:18 · 1132 阅读 · 0 评论 -
C++11/14::右值引用
swaptemplate<typename T>void swap(T& x, T& y){ T tmp(x); x = y; y = tmp;}使用右值引用或者移动语义的做法:template<typename T>void swap(T& x, T& y){ T tmp(std::move(x)); x = std::move(y); y原创 2015-11-17 09:42:31 · 1142 阅读 · 0 评论 -
C++基础——用C++实例理解UML类图
- 类间存在哪几种常见关系?- 它们之间的区别和联系是什么?- 如何在代码中反映类间的关系?- 如何理解 **IN/OUT** mode型的参数?原创 2015-11-01 11:54:04 · 25264 阅读 · 4 评论 -
C++基础——函数模板
函数模板类型推导重载函数模板原创 2015-11-02 13:41:52 · 1572 阅读 · 0 评论 -
C++基础——tricks,让人惊艳的那些代码
本文主要涉及c++中常见的一些神奇的tricks。1. 获得可变参数列表中最大类型的类型大小2. tagged union3. 模板的特化原创 2015-11-02 00:01:10 · 2293 阅读 · 0 评论 -
C++基础——有关FILE的那些函数
为了常常遗忘的记录吧:1. 获得文件大小(所占字节数)。原创 2015-11-02 17:13:11 · 1016 阅读 · 0 评论 -
C++基础——类模板
类模板类模板stack的实现拷贝构造函数和赋值运算符类模板的特化局部特化缺省模板实参类模板类模板stack的实现有两个角度观察STL中的stack模板类模板类通过将stack定义为模板类的形式实现stack类实体对不同类型数据(模板参数指定)的存储支持。template<typename T>原创 2015-11-02 16:21:29 · 1250 阅读 · 0 评论 -
C++基础::类设计的几大原则
普通成员函数与虚函数在一个抽象基类的内部可以有三种形式成员函数:普通成员函数 所有派生类共享的函数实现,可以不给出实现(其实这样做没有意义),但当调用时自然会发生解析错误。虚函数 必须给出实现,否则子类无法进行函数的重写。子类可对其进行部分重写,根据需求。纯虚函数 全部子类如果想成为能够实例化对象的类,必须实现父类的全部纯虚函数,否则子类仍是抽象类无法实例化对象。 class B原创 2015-11-10 17:46:17 · 3217 阅读 · 2 评论 -
C++中的萃取机制(traits)
由来在设计迭代器(iterator)时,考虑到需要经常访问迭代器所指对象之类型,称之为该迭代器的value_type,利用内嵌类型声明typedef可轻松实现隐藏所指对象类型:template<typename T>struct Iterator{ typedef T value_type;}如此一来,泛型算法便可通过typename Iterator<T>::value_原创 2015-12-10 21:19:43 · 2761 阅读 · 0 评论 -
C++基础::STL中的定理
C++标准库中凡”凡必须返回两个value”的函数都使用pair对象我们以set的插入成员函数insert为例加以说明,因为set容器是一个自动排序的容器,set容器要求,插入元素要返回插入的位置以插入是否成功两个属性:set<int> iset;...pair<set<int>::iterator, bool> res = iset.insert(1); // 这样的写法并无太原创 2015-11-16 11:27:35 · 949 阅读 · 0 评论 -
C++基础::拾遗&&琐碎
hpp vs cpphpp:类声明cpp:类实现原创 2015-11-17 23:03:32 · 949 阅读 · 0 评论 -
产生一定范围随机数的通用表达式
要知道rand()%(b-a)产生的随机数范围为[0, b-a-1],知道这一点,下列实现都比较容易了:产生(a, b)rand()%(b-a-1)+(a+1)产生[a, b)rand()%(b-a)+a产生(a, b]rand()%(b-a)+(a+1)产生[a, b]rand()%(b-a+1)+a原创 2015-12-13 17:03:00 · 1702 阅读 · 0 评论 -
C++设计模式::装饰模式or代理模式or面向切片编程(AOP)
一个实例 装饰模式:动态地给一个对象(而非一个类)添加一些额外的职责。就增加功能来说,装饰模式比创建子类更加灵活,因为有时我们的需求是给某个对象而不是整个类添加一些功能,比如为一部手机添加增加挂件、屏幕贴膜等等特性,一种比较灵活的方式,将手机(被装饰器类)嵌入到另一个对象(装饰器类)中(两者之间是一种组合关系),有这个对象(装饰器类)完成对象新特性的添加。如上面的装饰器UML类图所示,装饰器类原创 2015-11-20 21:16:03 · 3130 阅读 · 2 评论