C++应用
文章平均质量分 69
C++实战:使用C++实现日志系统、通讯录、日历、文件传输等应用
冯Jungle
C++开发者
展开
-
C++设计实现日志系统
日志系统几乎是每一个实际的软件项目从开发、测试到交付,再到后期的维护过程中极为重要的查看软件代码运行流程、还原错误现场、记录运行错误位置及上下文等的重要依据。一个高性能的日志系统,能够准确记录重要的变量信息,同时又没有冗余的打印导致日志文件记录无效的数据。本文Jungle将用C++设计实现一个日志系统。1.为什么需要日志为什么需要日志?其实在引言中已经提到了,实际的软件项目的几乎每个过...原创 2019-11-17 11:06:58 · 6654 阅读 · 3 评论 -
【C++】CRTP:奇异递归模板模式
1. 什么是CRTP?什么是CRTP?CRTP的全称是Curiously Recurring Template Pattern,即奇异递归模板模式,简称CRTP。CRTP是一种特殊的模板技术和使用方式,是C++模板编程中的一种惯用法。CRTP的特性表现为:基类是一个模板类 派生类继承该基类时,将派生类自身作为模板参数传递给基类典型代码如下:// 基类是模板类template <typename T>class Base{public: virtual ...原创 2022-02-26 12:11:47 · 6680 阅读 · 1 评论 -
浅析C++类的内存布局
之前Jungle写过一篇文章《探究C++:虚函数表究竟怎么回事?》,主要xiang原创 2021-06-11 23:24:55 · 811 阅读 · 4 评论 -
C语言实现通讯录
本程序用来写一个通讯录程序 头文件AddressBook.h定义结构体:#ifndef ADDRESSBOOK_H#define ADDRESSBOOK_H///标准输入输出#include <stdio.h>///系统函数#include <stdlib.h>#include <string>using namespace std;t...原创 2018-07-22 16:41:42 · 380 阅读 · 0 评论 -
C语言实现万年历
本小节Jungle用C语言实现一个万年历,输入年月日,则显示出该月的日历。1.编程思想如何计算给定的某年某月某日对应的日历,关键的是确定:当年是不是闰年当月有多少天当天是星期几对应着,需要解决以下几个问题:如何判断是否是闰年—口诀:“四年一闰,百年不闰,四百年又闰”只有2月份特殊,闰年29天,普通年份28天除以7的余数来判断。那么接下来就是解决:什么数来除以...原创 2018-07-22 23:50:10 · 3428 阅读 · 9 评论 -
C++设计矩阵,实现矩阵相乘和求逆矩阵
矩阵变换是机器人学的基础,所以Jungle把这一节内容划分到“工业机器人”栏目。这一节Jungle用C++设计了矩阵的类Matrix,并设计了3个方法:矩阵相加add矩阵相乘multiply求矩阵的逆矩阵inverse有了这三个方法,足以进行机器人正逆运动学分析了。直接上代码:#include&amp;amp;lt;iostream&amp;amp;gt;#include&amp;amp;lt;stdlib.h&amp;amp原创 2018-11-16 20:20:09 · 3619 阅读 · 6 评论 -
C++实现堆排序
void adjustHeap(int arr[],int N,int i){ int j = 2*i; if(j<N && arr[j+1]>arr[j]) j++; if(j<N && arr[j]>arr[i]) { int temp = arr[i]; ...原创 2018-08-17 17:32:08 · 202 阅读 · 0 评论 -
C++实现选择排序法
选择排序法的思想是从待排序的序列中找到最小(若从大到小排序,则找最大值)值加入到有序序列中。基于这个思想,很容易实现其算法。注意,选择排序法不是一种稳定的排序法,其时间复杂度为O(n2)。#include <iostream>using namespace std;void selectSort(int a[],int N){ int i,j,k; for(...原创 2018-08-08 01:28:49 · 2751 阅读 · 8 评论 -
C++实现快速排序法
快速排序法,要点在于选取一个基准值,通过一次比较将大于该基准值的数放到该基准值的一侧,小于该基准值的数放到该基准值的另一侧,再分别对两侧的子序列重复上述过程,以此完成排序。本节Jungle图文并茂举例介绍快速排序法。 对于初始序列:{12,45,90,1,34,87,-3,822,23,222},快速排序法过程如下:1.快速排序过程讲解2.代码实现void quickSort...原创 2018-07-08 00:32:56 · 2659 阅读 · 1 评论 -
C++实现归并排序法
本节内容Jungle用C++实现实现归并排序法。在百度百科里,对归并算法是如下说明的: 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。 由此可看出,归并排序分为两个步骤:排序每个子序列,合并两个有序数列。其...原创 2018-07-07 21:50:32 · 1306 阅读 · 0 评论 -
C++实现希尔排序法
希尔排序法是对直接插入排序法的优化,通过设置一个增量,对原始序列进行分组,对每组用直接插入排序法排序再整合,再缩小增量,周而复始直至增量为1,完成排序,因此又叫“缩小增量排序法”。本节Jungle图文并茂介绍一下希尔排序法,并给出C++代码。1.举例说明希尔排序法过程以一个整数序列为例来说明{12,45,90,1,34,87,-3,822,23,-222,32},该组序列包含N=11个数。...原创 2018-07-06 22:06:38 · 2839 阅读 · 1 评论 -
C++实现直接插入排序法
直接插入排序法是将当前元素按照值大小,插入到有序元素组中的适当位置的一种排序方法。最直观的例子是玩扑克牌斗地主,每次摸牌之前,手上的牌是已经按大小排好顺序的,每次摸的牌都要插入到合适的位置。 因此,直接插入排序法的基本思想是: - 对于当前插入的元素a[i],之前的序列a[0],a[1],….,a[i-1]是有序序列; - 比较a[i]与之前有序序列的值,找到a[i]合适的插入位置; ...原创 2018-05-26 00:27:23 · 5523 阅读 · 1 评论 -
C++实现冒泡排序法
冒泡排序法是一种经典的排序方法,虽然其效率较低,时间复杂度为O(n2),仅适用于数据规模较小的排序。但作为一种经典排序方法,还是应当学习掌握。 下面Jungle用C++实现两种冒泡排序法: ①传统的冒泡排序法sort_Bubble:内外两轮循环,前后两个数据依次比较; ②改进的冒泡排序法sort_Bubble2:同样是内外两次循环,但用一个标记来标识当前这一轮是否发生数据交换,如果没发生,说...原创 2018-05-24 23:03:55 · 2454 阅读 · 0 评论 -
C++和Qt 获取系统CPU、内存和磁盘空间
1.CPU用SYSTEM_INFO来获取系统CPU的相关信息。在WinBase.h头文件里,可以找到结构体SYSTEM_INFO的定义。通过结构体可以访问到系统CPU信息。typedef struct _SYSTEM_INFO { union { DWORD dwOemId; // Obsolete field...do not use ...原创 2018-04-27 17:20:21 · 2885 阅读 · 0 评论 -
栈应用之平衡字符
编译器检查程序的语法错误,但是常常由于缺少一个符号(如遗漏一个花括号或者注释起始符),引起编译器列出上百行的诊断,而真正的错误并没有找出。这种情况下,一个有用的工具就是去检验成对出现的符号,比如每一个左花括号{都搭配一个右花括号}(方括号、圆括号等)。例如,”([])”是对的,而“({)}”显然是错的。 本节Jungle用栈来实现这样一个平衡字符的程序,两步走:1.链表实现栈的设计2.平...原创 2018-07-11 20:49:43 · 185 阅读 · 0 评论 -
最小二乘法拟合椭圆——MATLAB和Qt-C++实现
本小节Jungle尝试用最小二乘法拟合椭圆,并用MATLAB和C++实现。1.理论知识平面上任意位置的一个椭圆,其中心坐标为(x0,y0),半长轴a,半短轴b,长轴偏角为θ,方程通式为 其中 在原始测得的N(N≥5)组数据(xi,yi),(i=1,2,3,…,N)中,根据椭圆方程通式和最小二乘法原理,求目标函数 的最小值来确定参数A、B、C、D和E。令F(A,B,C,D,E)...原创 2018-07-01 21:31:26 · 12032 阅读 · 46 评论 -
最小二乘法拟合圆——MATLAB和Qt-C++实现
本节Jungle尝试用最小二乘法来拟合圆,并用MATLAB和C++实现。1.理论知识根据圆心(A,B)和半径R可确定平面上一个圆。平面上圆方程的通式为 其中 第一个圆的通式是关于a、b和c的线性方程。利用最小二乘法建立圆拟合的数学模型,求得参数a、b和c的值,再根据第二个方程组求出圆的实际参数A、B和R。 在原始测得的N(N≥3)组数据(xi,yi),(i=1,2,3,…,N...原创 2018-07-01 21:24:46 · 19022 阅读 · 19 评论 -
最小二乘法拟合直线——MATLAB和Qt-C++实现
本节Jungle用C++实现最小二乘法拟合平面直线。1.理论知识平面直线的通用方程可以表示为 其中,A是直线的截距,B是直线的斜率。对于测量的二维坐标(x,y),x是精确分布的,而y是观测值。基于最小二乘的理论,我们要得到观测值的误差的平方和的最小值。我们设定目标函数为: 分别对A和B求偏导数,并命其为零,得到以下方程组: 解此方程组,则可以得到A和B。2.算法实...原创 2018-06-30 22:10:21 · 8371 阅读 · 0 评论 -
回调函数解析与示例
回调函数是指用户自己声明并实现一个函数,然后把这个函数名作为参数传入另一个函数(别人定义或者系统库函数)中,由别人(或系统)的函数在运行时来调用的函数。函数是用户实现的,但由别人(或系统)的函数在运行时通过参数传递的方式调用,这就是所谓的回调函数。简单来说,就是由别人的函数运行期间来回调你实现的函数。另一方面,也可以说回调函数是高层函数,由用户根据需求定义实现;用户将该函数作为参数传入到底层函...原创 2019-02-24 21:52:11 · 519 阅读 · 0 评论 -
面试必问:进程与线程的异同以及进程间通信方式
秋招面试必问的题目,感觉今年被问了差不多10次了。1.进程与线程进程:具有独立功能的程序关于某个数据集合上的一次运行活动。线程:进程的一个实体。比喻:一列火车是一个进程,火车的每一节车厢是线程。2.进程与线程的联系①一个线程只能属于一个进程,一个进程可以有多个线程;②系统资源分配给进程,同一进程的所有线程共享该进程的所有资源;③真正在处理机上运行的是线程;④不同进程的线程间利用消...原创 2018-09-22 09:22:50 · 4785 阅读 · 0 评论 -
DXFLib开发注解
DXFLib开发包注解DXF格式文件时AutoCAD绘图交换文件,用于其他平台或者程序与CAD进行数据交互用的一种格式文件,在工程中十分常见。DXFLib是解析DXF格式图元的开源库文件,用C++实现。通过定义和实现了几个类及其方法来读取、解析和分类原CAD图形文件中的几乎所有元素(图层、点、直线、圆、标注、线型、线宽等)。结合DXFLib,网上已有许多开源代码用于实现程序对CAD文件的读取,...原创 2018-04-16 22:28:12 · 5173 阅读 · 10 评论