随笔分类 - C++
摘要:### `highgui`的常用函数:`cv::namedWindow`:一个命名窗口`cv::imshow`:在指定窗口显示图像`cv::waitKey`:等待按键### 像素级* 在灰度图像中,像素值表示亮度,所以0表示黑色,255表示白色;* 图像在本质上都是一个矩阵,但是灰度图像的值就是一个矢量,而彩色图像则是多通道的向量,所以可以通过`image.at(row,colomn)[]`来取值,灰度就是`uchar`,常用的RGB通道则是`cv::Vec3b`,b代表ushort,s-short, i-int, f-float. at方法本身不做任何类型转换;* 矩阵可以声明为`cv::M
阅读全文
摘要:简单封装了一下,不是很严谨。 1 /************************************************************************/ 2 /* INSTRUCTION: 封装ADO数据库相关操作 3 DETAILS: 只能在MFC下使用,因此使用了MFC的字符串类 4 尝试进行了深度封装,但是很多选项(如存储过程)被屏蔽了,适合小型项目使用。 5 NOTE: ADO数据库访问并不是线程安全的,多个线程公用一个Connection需要线程同步,推荐方法 6 是每个线程用一个单独的Connect...
阅读全文
摘要:常用简写:namespace logging = boost::log;namespace src = boost::log::sources;namespace expr = boost::log::expressions;namespace sinks = boost::log::sinks;namespace attrs = boost::log::attributes;namespace keywords = boost::log::keywords;要点:结构图要牢记在心;trivial头文件可用于一般的控制台输出,日志等级被定义在改头文件;全局日志等级过滤使用loggi...
阅读全文
摘要:替人写的C语言作业…介绍:程序名称:密码强度检测程序注释风格:doxygen测试环境:linux3.6, gcc4.7window7, vs2012已知问题:1. 算法与参考链接不一致,结果会有差别,详见代码注释。2. 在vs下可能会编译不通过,将后缀改为cpp就可以了。vs的C编译器实现对C90支持不佳,gcc4.5以上可以正常编译通过。 1 #ifndef CHECKPASS_H_INCLUDED 2 #define CHECKPASS_H_INCLUDED 3 4 /*! 5 * \brief 本程序用于检测密码强度 6 * \details 请根据提示输入密码,程序会自动输出...
阅读全文
摘要:项目要用到数据库,本来打算用资料更多,名声更好的mysql的。卸载了自带的版本装了MariaDB 10.0,然后发现没有成熟的C++库可用(只有一个提交不久的libmariadb++),于是想回滚到原来的mysql5.5,但是悲剧的事情发生了…回滚出问题了。用的系统是Linux Mint14,不管是purge还是remove,然后重装MySQL的时候都会卡死…于是我直接放弃了MySQL,用上了据说国内很少用,但是企业中用的不少的PostGreSQL。 安装过程不说了,用源里面的资源就行,我现在的版本是9.2。C++库是libpqxx3-dev,官网有4.0.1的版本,我自己装了一下,链接的时候
阅读全文
摘要:在MFC里面用了一下iniparser类,发现功能不健全,又重新封装了一下,删除了上一篇日志。MFC和boost的兼容性很烂,我为了省事专门给CString做了重载和特化。头文件(VS一直不支持export关键字,非常蛋疼): 1 /************************************************************************/ 2 /* Instruction: CIniParser类主要是封装了boost::property_tree::ini_parser中的几个 3 函数,用来操纵ini配置文件。ini文件用于比较简单的程序...
阅读全文
摘要:一个表达式E的逆波兰式如下定义:如果E是一个变量或者常量,E的后缀式是其自身;如果E是E1 op E2的形式,则其后缀式是E1' E2' op的形式,其中E1'表示E1的后缀式;如果E=(E1),那么E的后缀式与E1相同(换言之,逆波兰式不需要括号来表示优先级);将一个普通的中缀表达式exp转换为逆序表达式的一般算法是:stack s1,s2; //s1是临时存放运算符的,s2是存放后缀式的s1.push('#'); //放入优先级最低的符号for x in exp:if(x is num):y=got(x);//注意这里got函数里面必须完成x迭代器的
阅读全文
摘要:网上已经有很多答案了,我这里只是记一下自己的,没啥创新或者参考意义:)1. a>cvAbs和cvRound; b>cvRandInt和cvRandReal;c>cvPoint2D32f,cvPointFrom32f;d>cvPointTo32f2. CvMat *matrix=cvCreateMat(100,100,CV_8UC3); assert(matrix); cvZero(matrix); cvCircle(matrix,cvPoint(50,50),50,CV_RGB(255,0,0)); cvNamedWindow("ex3_2",1);
阅读全文
摘要:搜索树是一种很常用的数据结构,支持search、minimum、maximum、predecessor、successor、insert和delete等多种动态集合的操作,经常被用来做字典或优先级队列。binary search tree的所有操作都与树的高度成正比,也就是O(h)。我们称一颗二叉树...
阅读全文
摘要:图论看的头大…于是翻了翻抱佛脚必备书:《程序员面试宝典》,这书编的确实不怎么样,边边角角的题目有点多,有些题目的解答思路很不清晰,当做题库看看也就罢了。今天翻到一道标准容器复制含有指针成员的类导致重复解析的问题,专门回忆了下这方面的知识,在这里做个总结。C++最讽刺的地方就是“用指针实现了面向对象”这点,所以C++压根不是什么面向对象,说是面向指针更恰当一点。内存管理这块一直是C++最复杂的地方之一,也是很多人讨厌C++的最大原因之一(我猜C风格字符串是另外一个原因之一)。复制(或使用隐含复制的操作)含有指针成员的类,必须对指针成员做一些特殊的处理,主要方法包括以下几种:①值型类,在复制指针成
阅读全文
摘要:本章为基本数据结构的一些操作,很基础,当然也很重要。数据结构必须是泛型的,但是C对于泛型的支持只有通过void*强制转换,而且这也不是万能的,比较好的书籍可以参看《C interfaces and implementions》,当然这方面的代码是很成熟的。ADT在C中的实现大致通过三种方式:静态数组、动态数组和链表。如果不使用指针,那么必须用宏来实现Stack_Type的泛型,push,pop和top的操作数类型都和Stack_Type关联。静态数组的stack实现就是简单的:#define Stack_Type int#define Stack_Size 2048//static array
阅读全文
摘要:1 #include 2 #include 3 #include 4 void swap(int* A,int i,int j) 5 { 6 int temp=A[i]; 7 A[i]=A[j]; 8 A[j]=temp; 9 }10 int partition(in...
阅读全文
摘要:计数排序C代码如下,显然这货是不能用于字符串排序的(非比较排序只有基数排序可以用来排序字符串):#include <stdio.h>#include <malloc.h>#include <assert.h>#include <stdlib.h>#define MAX 100 //取值范围k=99,为了保持main形式上的一致性,这里用了宏void counting_sort(int* A,int p,int r){ int* C=(int *)calloc(MAX,sizeof(int)); int* B=(int *)malloc(r*siz
阅读全文
摘要:快速排序相关C代码: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 void swap(int* A,int i,int j) 5 { 6 int temp=A[i]; 7 A[i]=A[j]; 8 A[j]=temp; 9 }10 int Partition(int* A,int p,int r)11 {12 int x=A[r-1];13 int i=p-1,j=p;14 for(;j<r-1;++j) {15 if(A[j]<=x)16 ...
阅读全文
摘要:1 /*-----------Heap-Sort implemented in C------------------*/ 2 3 #include <stdio.h> 4 #include <stdlib.h> 5 6 inline int left(int i) 7 { 8 //C语言中下标从0开始 9 return (i<<1)+1;10 }11 inline int right(int i)12 {13 return (i<<1)+2;14 }15 inline int parent(int i)16 {17 return (i-1)&g
阅读全文
摘要:这部分主要学习概率分析。在概率论的教程里面其实已经学过这些了…附录C的第一部分是排列组合的基础知识;第二部分是经典概率论;第三部分是离散随机分布的一些概念(期望、方差);第四部分介绍了两个常见的离散分布:几何分布和二项分布;最后一部分是可选内容,介绍了二项分布的尾相关的上下界。第五章主要介绍了随机算法的写法,特别强调了均匀随机的概念,引入随机变量指示器作为一个计算期望的技巧。内容小结:计数:略概率:贝叶斯公式: \[Pr\{A | B\}=\dfrac{Pr\{A\}Pr\{B|A\}}{Pr\{B\}}\] 全概率公式:Pr{B}=Pr{B|A1}+Pr{B|A2}+...+Pr{B|...
阅读全文
摘要:常用符号:$\Theta$表示渐近确界,O表示渐近上界,$\Omega$表示渐近下界;o表示非渐近上界,$\omega$表示非渐近下界。 下取整:$\lfloor\quad\rfloor$,上取整$\lceil\quad\rceil$ 取模运算:a mod n = a - $\lfloor a/n \rfloor$*n几个结论:$n^b=o(a^n)$(a>1),任何底大于1的指数函数比任何多项式函数增长的更快; $lg^bn=0(n^a)$(a>0),任意正的多项式函数都比多项式对数函数增长的快; 阶乘n!=$o(n^n)$,n!=$\omega(2^n...
阅读全文
摘要:凛冬将至。——《冰与火之歌》————————————————————————————插入排序、合并排序: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <malloc.h> 4 #include <string.h> 5 void insertion_sort(int* array,int p,int q) 6 { 7 int j=p+1,i; 8 for(;j<q;++j){ 9 int key=array[j];10 for(i=j-1;i>=0;--i){11 ...
阅读全文