C++软件开发常用辅助软件——gprof
摘要:gprof 生成函数调用关系以及调用次数,并统计耗时。用于优化代码或发现隐藏的问题。 示例 示例代码 1 #include <stdio.h> 2 3 void FunB() 4 { 5 int a = 1; 6 int b = 2; 7 int c; 8 for(int i = 0; i < 10
阅读全文
C++软件开发常用辅助软件——Cppcheck
摘要:Cppcheck Cppcheck是一种C/C++代码缺陷静态检查工具,不同于C/C++编译器及其它分析工具,Cppcheck只检查编译器检查不出来的bug,不检查语法错误。执行的检查包括: 1. 自动变量检查 2. 数组的边界检查 3. class类检查 4. 过期的函数,废弃函数调用检查 5.
阅读全文
C++软件开发常用辅助软件——SCons
摘要:SCons scons是一个Python写的自动化构建工具。每次构建时,会自动执行必要的命令以及重建必要的组件(即整个项目如果只修改了一份源代码文件,将仅重新构建跟这份源代码相关的组件)。 默认构建时,将自动查找当前目录是否存在SConstruct、Sconstruct、sconstruct的文件(
阅读全文
C++软件开发常用辅助软件——Valgrind
摘要:Valgrind Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。该工具内部又包含多个子工具集(如memcheck, cachegrind, callgrind, helgrind等等),每个子工具集相互独立,每一次分析只能选择一个子工具,默认子工具为memcheck。
阅读全文
C/C++代码覆盖率生成
摘要:初始状态下只有一个源代码文件nosoul@linux:testCov> lstest.cnosoul@linux:testCov>第一步:编译、链接、执行可执行文件gcc -o a -coverage test.c -lgcov && ./a这时会生成所需的记录文件(*.gcda,*.gcno)no...
阅读全文
排列的逆
摘要:将排列(abcdef)应用(cdfbea),那么它的逆为(cdfbea)应用(abcdef)等价于(abcdef)应用(fdabec)所以(cdfbea)的逆为(fdabec)算法A流程 E1.获取当前的替代X,X[i]表示i被X[i]代替,将m从1到n遍历(全部遍历,与起始点无关),设j为任意负值. E2.获取当前的i=X[m],如果当前X[m]0,则回E3;否则将X[m]=-j; E5.m自增加1.如果m>n,算法结束.证明 某排列的逆可以分为1~n个部分,每个部分可以看作一个环.通过遍历,对于每个点所在的环,要么已经遍历过要么没有遍历过,对于没有遍历过的,一开始这个环上的某个节点.
阅读全文
排列乘法
摘要:假设我们已有6个元素{a,b,c,d,e,f},我们要将这6个元素的一个序列改成另一个序列 比如:a b c d e f ---> c d f b e a我们可以采用“循环记号”标记上面的改变 (acf)(bd)表示为a-->c,c-->f,f-->a,b-->d,d-->b在一个排列之后我们又可以应用另一个排序,我们可以将两个排列相乘| a b c d e f | |a b c d e f | | a b c d e f || | * | | = | || c d f b e a | | b d c a f e | | c a...
阅读全文
扩展欧几里得算法
摘要:给定两个正整数m和n,我们计算它们的最大公因子d和两个整数a和b,使得a*m+b*n=d算法流程 E1.置a'=b=1;a=b'=0;c=m,d=n; E2.计算d和r,使得c=q*d+r; E3.若r==0;则退出,当前已有a*m+b*n=d; E4;c=d;d=r;t=a';a'=a;a=t-q*a;t=b';b'=b;b=t-q*b;返回E2.证明 递归版本: 对于已有的m和n,假设m>n;如果刨除变量a,b,a',b';算法与欧几里得算法完全一样,为计算最大公约数的算法. 最终要求的为a*m+b*n=d=GCD(m,
阅读全文
欧几里得算法
摘要:给定两个正整数m和n,求它们最大公因子,即能整除m和n的最大正整数(a=b*c,则b和c都能整除a)算法流程 E1.以n除m,r为所得的余数(0<=r<n) E2.如果r为0,算法解决,n为答案 E3.m=n,n=r;返回步骤E1证明 对于任意正整数q,存在m=q*n+r 1)如果r==0;n即为最大公约数 2)如果r!=0;对于任意m和n的公约数g; 因为r=m-q*n,所以g能整除r; 所以m和n的公因子集合与n和r的公因子集合相同 所以GDC(m,n)=GCD(n,r)=GCD(n,m%n)代码实现int GCD(int m,int n){ int r; ...
阅读全文
类A have-a 类B,类B访问类A public 成员
摘要:需求是类A中包含类B,而类B又需要访问类A的public属性的成员。首先类B中要访问类A的属性,那么对于类B而言,我们必须要知道有类A这个类,所以在类B的具体实现之前我们需要前向声明类A。对于类A包含一个类B的对象,那么对于类A而言,需要知道类B的构造函数,所以类B的构造函数的声明需要在类A的具体实...
阅读全文
本地CodeForces
摘要:#include #include #define MAXCMDLEN 200#define MAXLINELEN 10000int LastDiv,NewDiv,MaxPage;int Div,IndexCnt;char Cmd[MAXCMDLEN],Line[MAXLINELEN],Name[5],Png[MAXCMDLEN];int i,j,k,l,p,Len;FILE *fIndex,*fTemp,*fExist,*fWrite;void AddToIndex(FILE *file,int i,char *str){ fprintf(file,"\t\t%d%s...
阅读全文
Debug Logs
摘要:logs.h#ifndef _LOGS_H_#define _LOHS_H_#include <stdio.h>#define DEBUG 1#define _LTS_AM 1#define _LTF_AM 0#if DEBUG#define DSPRINTF(cope,mesg,arg...) if(cope)printf(mesg,##arg);else #define DFOPEN(cope,file,filename,arg) if(cope)file=fopen(filename,arg);else #define DFPRINTF(cope,file,...
阅读全文
RSA算法
摘要:函数入口参数void RSA(LL data,int mode,LL d,LL e,LL n) data为要加密或解密的数,mode为模式(1加密,0解密),{e,n}为公钥,完成加密,{d,n}为私钥,完成解密。算法流程 1.任取两个素数p,q; 2.计算n=p*q; 3.计算N=(p-1)*(q-1); 4.选取一奇数e,使得GCD(e,N)=1; 5.计算d,使得(e*d)%N=1,d的计算方法如下: 1)n1= N,n2=e,b1=0,b2=1 2)求 s 和 r,使 n1 = s×n2 + r 3)如果r≠0 则n1 =n2,n2=r,t=b2,b2=b...
阅读全文
MD5算法
摘要:函数入口参数void MD5(UC *data) 输入为一个任意长度的字符串,加密结果是32位的16进制数,如:MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72算法流程 1.对于输入的字符串,按位填补一个1以及若干个0使得填补后的位数为 N*512+448(按字节的话就是N*64+56),N>=0 2.再添加一个64位(8个字节)的数,该数字为原始长度,使得最后的字符串变为(N+1)*512位(既(N+1)*64字节)。 3.初始化四个32位的数,A=0x67452301;B=0xefcdab89;C=0x98badcfe;
阅读全文
DES算法
摘要:函数入口参数void DES(ElemType StrText[64],ElemType KeyText[64],ElemType Mode) StrText为需要处理的二进制串,KeyText为密钥二进制串,Mode为工作模式(1为加密,0为解密)算法流程 1.将要处理的二进制串进行IP置换 2.将密钥进行PC1置换(64位转为56位), 3.进行16轮操作,对于第i轮操作: 1)将上一次得到的PC1密钥(级除去第一次外,其他的都经过移位处理)的结果左右部分(各28位)分别循环左移1位或2位,然后将移位后的密钥进行PC2[i]置换. 2)将处理串均等分为左右两串Li,Ri...
阅读全文
仓库库存管理系统(C+MySQL+ODBC)
摘要:SQL:create database ckkc;create table users(name char(35) not null primary key,psw char(50) not null)create table op(id int not null primary key auto_increment,flag int not null,pname char(15) not null,num int not null)create table st(pname char(15) not null primary key,num int not null)insert into
阅读全文
文件管理模拟
摘要:#include <stdio.h>#include <windows.h>int main(){ int nok; char strsrc[]="D:\\A\0"; char strdst[]="D:\\B\0"; char strtitle[]="File Copying"; DWORD ret; SHFILEOPSTRUCT fileop; fileop.hwnd=NULL; fileop.wFunc=FO_COPY; fileop.pFrom=strsrc; fileop.pTo=strdst; fil
阅读全文
设备管理模拟
摘要:#include <windows.h>#include <stdio.h>#include <stdlib.h>#include <conio.h>//显示操作菜单void Menu(){ printf("\n\n\t1-------------------------设置鼠标为左手习惯\n"); printf("\t2-------------------------设置鼠标为右手习惯\n"); printf("\t3-------------------------获取键盘类型和功能键个数\
阅读全文
页式存储管理部分功能模拟
摘要:先进先出(FIFO)淘汰算法#include <stdio.h>/*页表长度,实际上是由系统按照作业的长度决定的*/#define N 64#define LENGTH 10typedef struct{ int lnumber;/*页号*/ int flag;/*是否在主存中,1表示在,0表示不在*/ int pnumber;/*所在主存块的块号*/ int write;/*是否修改过,1表示修改过,0表示没修改过*/ int dnumber;/*磁盘块号*/} Page;/*页表定义*/Page page[N];int m;int page_length;in...
阅读全文
进程死锁模拟
摘要:#include <stdio.h>#include <windows.h>int tickets=30;/*临界区对象*/CRITICAL_SECTION g_csA,g_csB;/*线程数据信息*/DWORD WINAPI Fun1Proc(LPVOID lpParameter){ while(1) { /*进入临界区*/ EnterCriticalSection(&g_csA); Sleep(1); if(tickets>0) { EnterCriticalSection(&g_csB...
阅读全文
|
|