
编程杂项
文章平均质量分 52
liyuanbhu
这个作者很懒,什么都没留下…
展开
-
C++ 学习笔记(Structured bindings)
这个特性是 C++17 引入的,个人认为主要是解决如何让函数返回多个值的问题。在这之前,我们一般用 std::pair 或者 std::tuple 来返回多个值。在上面的例子中,我们先定义了一些变量,然后用 std::tie 把他们绑定成一个 std::tuple,这样就可以获取多个值了。在C++ 17 中,把这个特性更近了一步。原创 2024-02-29 11:36:28 · 588 阅读 · 0 评论 -
C++ 中的 std::pair 和 std::tuple
这两个类都是模板类。我个人认为 std::pair 和 std::tuple 最大的用途是用在函数返回值。这两种方法都没有 std::pair 或者 std::tuple 方便。最近在看 C++ 11 的标准,发现了 std::pair 和 std::tuple。std::tuple 可以说是 std::pair 的增强版本。这里还要提到 std::tie() 函数,这个函数可以临时将几个变量绑定成一个 std::tuple。从这个例子也能看出,std::pair 是一个特殊的 std::tuple。原创 2022-12-24 16:44:38 · 1031 阅读 · 0 评论 -
VirtualBox 虚拟机内操作系统与宿主操作系统共享文件夹的方法
今天要装某 D 版软件,怕有病毒,没敢在直接在电脑上装。想了个办法,先装了个虚拟机,然后在虚拟机上安装软件。好几年没用虚拟机了,原来用的是 VMware。不过去 VMware 官网看了下,感觉 VMware 是不是改行了。上面全是各种云平台,没找到单机版的虚拟机。不过还好,仍旧是免费的。网上找了几个介绍,说的都很简单,设置-》共享文件夹 里面填好路径就行了。下载下来,挂载到虚拟机的光驱里。看起来很简单的一件事,我却折腾了半天。下载安装都很顺利,正好我这里有Win7 的光盘镜像。随便百度了序列号就装上了。原创 2022-11-01 22:01:11 · 913 阅读 · 0 评论 -
SQLite 对时间的支持
大多数的关系型数据库都会有时间或者日期类型。但是 SQLite 里面是没有的。虽然SQLite 没有专门的时间类型,但是它提供了一些时间和日期相关的转换函数。利用这些函数,我们也可以很方便的处理时间问题。首先我们来说说 SQLite 为什么不直接提供时间类型。因为时间类型是个非常复杂的,要考虑的因素非常多。时间是个物理量,对于物理量来说就有分辨率和范围这两个概念。对于一个会议室预约管理系统来说,精确到分钟就够了,可是对于一个精密的物理实验,有可能我们要处理纳秒甚至皮秒量级的数据。原创 2022-10-22 22:50:41 · 4105 阅读 · 0 评论 -
解决 Fedora Linux 35 下 Qt 程序 qDebug() 无输出问题
解决 Fedora Linux 35 下 Qt 程序 qDebug() 无输出问题最近电脑硬盘升级,富裕了不少空间。就装了个 Fedora linux。说起来我也算是个 linux 的老用户了,最开始用还是 redhat 9.0 。之后基本上就只用 Fedora linux。我记得用的第一个版本是 Fedora Core 3,后来一直用到 Fedora 23。中间还用过几个国产的 linux 发行版,比如 magiclinux。也用过 ubantu 和 debian 。前几年因为工作太忙,就没有在用 l原创 2022-01-01 13:56:38 · 1167 阅读 · 0 评论 -
《Head First 设计模式》例子的C++实现(4 单件模式)
#《Head First 设计模式》例子的C++实现(4 单件模式)单件模式使用场景比较多。基本的实现要点就是将构造函数设为私有的,这样就不能随便生成变量了。下面是一个简单的代码示例,没有考虑多线程情况。ChocolateBoiler 类也不希望别人拷贝,所以也把拷贝构造函数设为私有了。另外 C++与 java 最大的不同是 C++ 需要自己处理资源释放问题。所以还需要个 releaseIn...原创 2018-10-28 21:45:24 · 529 阅读 · 0 评论 -
《Head First 设计模式》例子的C++实现(7 Facade 模式)
#《Head First 设计模式》例子的C++实现(7 Facade 模式)Facade 模式与适配器模式类似,都是让原有功能代码呈现另一种接口方式。这个设计模式比较简单,就不多介绍了。下面是代码:class PopcornPopper;class Projector;class Amplifier;class DvdPlayer;class WatchMovieFacade{...原创 2018-10-28 20:26:36 · 323 阅读 · 0 评论 -
《Head First 设计模式》例子的C++实现(10 状态模式)
#《Head First 设计模式》例子的C++实现(10 状态模式)状态机应用的也很广泛,只不过我们通常都是用一个变量来标志状态,然后用一个大的switch case 结构来处理各个状态。这种写法的缺点就是这个 switch case 会越来越大,越来越难维护。状态模式则是将各个状态都抽象成了独立的类。每个类只要关心当前状态要处理的事情就可以了,所以简化了代码。缺点也很明显,每个状态建一个类...原创 2018-10-28 16:28:58 · 818 阅读 · 1 评论 -
《Head First 设计模式》例子的C++实现(6 命令模式)
#《Head First 设计模式》例子的C++实现(6 命令模式)设计模式也是比较简单的模式。通常我们一个对象可能会有几十个对外的接口。我们要操作许多不同的对象时无法将这些对象搞成同样的接口。那么这时就可以一个单一的命令接口类。这个接口类作为桥梁,连接其他对象的某一个动作。这个设计模式主要的缺点是会引入大量的类,每个类只实现一小点功能。接口类可以设计成如下的样子:class Comman...原创 2018-10-28 11:27:29 · 507 阅读 · 0 评论 -
《Head First 设计模式》例子的C++实现(3 装饰模式)
《Head First 设计模式》例子的C++实现(3 装饰模式)装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 装饰模式的特点是 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。 但是这种模式会导致设计中出现许多小类,如果过度使用,会使程序变得很复杂。下面是代码:///B原创 2017-04-02 11:52:10 · 948 阅读 · 0 评论 -
《Head First 设计模式》例子的C++实现(适配器模式)
适配器模式比较简单。就是一种辅助类用一个类来模拟另一个类。下面是代码:/// duck.h#ifndef DUCK_H#define DUCK_H#include <iostream>class Duck{public: virtual void quack() = 0; virtual void fly() = 0;};class MallardDuck : publi原创 2017-03-03 21:17:42 · 1136 阅读 · 0 评论 -
《Head First 设计模式》例子的C++实现(2 观察者模式)
最近在学习设计模式,用的是 《Head First 设计模式》这本书。感觉这本书写的还是很不错的,深入浅出的介绍了各种常用的设计模式。唯一有点不方便的地方是这本书的例子全都是用的 Java 来实现的。而我主要是用 C++。所以就动手将书上的代码用 C++ 来实现了一遍。观察者模式首先是三个接口的代码://observer.h#ifndef OBSERVER_H#define OBSERVER_H原创 2017-02-18 23:12:07 · 1109 阅读 · 0 评论 -
《Head First 设计模式》例子的C++实现(5 单例模式)
最近在学习设计模式,用的是 《Head First 设计模式》这本书。感觉这本书写的还是很不错的,深入浅出的介绍了各种常用的设计模式。唯一有点不方便的地方是这本书的例子全都是用的 Java 来实现的。而我主要是用 C++。所以就动手将书上的代码用 C++ 来实现了一遍。原创 2017-02-19 13:56:36 · 812 阅读 · 0 评论 -
《Head First 设计模式》例子的C++实现(1 策略模式)
最近在学习设计模式,用的是 《Head First 设计模式》这本书。感觉这本书写的还是很不错的,深入浅出的介绍了各种常用的设计模式。唯一有点不方便的地方是这本书的例子全都是用的 Java 来实现的。而我主要是用 C++。所以就动手将书上的代码用 C++ 来实现了一遍。策略模式这一章用的是个 Duck 的例子。C++ 没有 interface 的概念,都是用类来实现的。 我将各个策略都放到了 be原创 2017-02-18 21:28:56 · 1476 阅读 · 0 评论 -
fedora 25 下安装 haroopad
fedora 25 下安装 haroopadharoopad 是一款免费的 markdown 编辑器,我在 WIN 下一直在用。昨天电脑上装了个 Fedora 25,发现在 Fedora 上安装 haroopad 还挺麻烦。这里记录以下。haroopad 的网址如下:http://pad.haroopress.com/user.html网站上没有 fedora 的安装包,只提供了 tar.gz 格式原创 2017-04-29 15:26:47 · 1306 阅读 · 0 评论 -
Microsoft Security Essentials 和 Windows Defender 离线升级包下载地址
自从微软提供了免费的杀毒软件之后我就卸载掉了其他的杀毒软件。但是最近遇到了个小问题,我这里有一批电脑不能联网,杀毒软件的升级成了问题。在网上搜索了一番,终于找到了官方的离线升级包下载地址。放在这里备用。https://www.microsoft.com/security/portal/definitions/adl.aspx#force原创 2016-09-22 22:09:36 · 20225 阅读 · 0 评论 -
windows 系统禁止使用 U 盘的方法
windows 系统禁止使用 U 盘的方法最简单的办法:注册表 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentCntrolSet\Services\USBSTOR] 将名为 “Start” 的 DWORD 值从 3 改到 4。重启后,当有人将 USB 存储设备连接到计算机时,虽然 USB 设备上的指示灯在正常闪烁,但在资源管理器当中就是无法找到其盘符,因此也就无法使用 USB原创 2016-09-18 20:13:06 · 1807 阅读 · 0 评论 -
fedora 20 如何在桌面显示图标
最近一位朋友问我为啥现在的 gnome 桌面上什么都不显示了。还有应用程序窗口上最大化、最小化的按钮怎么也都没了。 为啥呢,我只能说设计 gnome 的人都是傻 X,无他。 不过通过安装个gnome 的插件,还能解决这个问题。 首先安装 gnome-tweak-tool,安装方法就不多说了。 安装完之后,可以搜索 优化工具。图标有点像是个调音台。原创 2014-12-07 12:03:17 · 9645 阅读 · 0 评论 -
ThinkPad E530 Fedora 20 下无线上网问题
一直在用 Fedora 系列的 Linux, 但是它自带的无线网卡驱动似乎有些问题,经常是有时能连接上有时就不能。还经常搜索不到家里的无线路由器。因为家里有网线所以也就一直没在意。这两天在家里没什么事就折腾了一下,总算把无线网卡驱动搞定了。首先要确定无线网卡的型号, lspci 命令就可以,输出结果有如下一行。03:00.0 Network controller: Broadcom原创 2014-10-04 11:40:35 · 2621 阅读 · 0 评论 -
Fedora 20 软件升级遇到的一个小问题
前几天升级 Fedora 20 有几个软件报了错,错误内容大体如下:warning: %post(libkcompactdisc-4.12.1-1.fc20.x86_64) scriptlet failed, exit status 127Non-fatal POSTIN scriptlet failure in rpm package libkcompactdisc-4.12.1-1.fc原创 2014-01-24 10:33:18 · 2919 阅读 · 0 评论 -
Fedora 17 安装后记
最近新买了台电脑,这几天一直折腾着在上面装系统,装软件。昨天在电脑上安装了 Fedora 17, 一切还算顺利,这次由于我的刻录机坏了,用的是U盘安装的方式。算起来已经 1 年多没有折腾过这些了。安装 Fedora 17 之前,电脑上已经有了个D 版的 WinXP。(没办法,有些软件只能在这个平台上运行。)并且先安装 Win,再安装 linux 相对也简单一些。首先下载了 Fe原创 2012-10-21 19:31:32 · 2001 阅读 · 0 评论 -
用 GRUB 引导自己的操作系统
在 PC 机上捣鼓自己的操作系统遇到的第一个难题就是如何将内核加载到内存中执行。如果读过于渊写的《自己动手写操作系统》就会知道这部分的工作还是蛮繁琐的。而且实际上这部分工作和操作系统没太大的关系。好在随着 linux 等开源操作系统的发展,开源的引导加载程序也已经发展的很成熟了。我们可以利用前人的成果,将自己的操作系统改造成可以用现有引导加载程序引导的内核。 引导加载程序(BootLoad原创 2012-05-19 21:02:59 · 6666 阅读 · 2 评论 -
制作带有 GRUB 引导功能的软盘镜像文件
调试自己的操作系统时一般都会用到虚拟机、软盘镜像文件或硬盘镜像文件。我用的虚拟机是 Bochs ,无论是软盘镜像还是硬盘镜像文件的格式都很简单,或者说根本就没格式,就是个空白的文件,而磁头数、柱面数等参数在 Bochs 的配置文件中指定。这样有个好处就是生成镜像文件非常简单。比如说创建软盘镜像:dd if=/dev/zero bs=512 count=2880 of=floppy.img原创 2012-05-12 11:42:42 · 9057 阅读 · 6 评论 -
C++ 调用 Tesseract
C++ 调用 TesseractTesseract-ocr 是一个知名的开源的 OCR 。这里简单写写它的 C++ API 接口的使用方法。本文主要参考了:还有就是API 帮助文档:https://ub-mannheim.github.io/tesseract/index.html如何编译 tesseract 这里就不多说了。在 VC 下就是 vcpkg install tesseract 一条命令。先看一个官方的例子:#include <tesseract/baseapi.h>原创 2020-06-26 08:01:50 · 9603 阅读 · 0 评论 -
GNU Barcode 0.99 的一个 BUG 及解决办法
这两天将 barcode 库编译成 dll,测试时 调用 Barcode_Version 函数直接程序跑死。刚开始一直怀疑是我生成的 dll 有问题。后来用自带的 sample.c 测试却没问题。所以肯定是 Barcode_Version 函数出了问题。单步跟进去还真发现这个函数有个重大bug。下面是代码片段,大家一看就明白了。 for (it = PACKAGE_VERSION; it; it++) ///原创 2020-05-23 21:49:08 · 889 阅读 · 3 评论 -
Windows 下编译 GNU barcode 库
Windows 下编译 GNU barcode 库gnu barcode 是一个用来生成条形码的库。主页在:https://www.gnu.org/software/barcode/对这个库就不多介绍了。因为装了 MSYS2, 本来觉得编译这个库很简单,configure, make, make install 三步就够了。结果 第二步 mingw32-make 时就出了错,提示:make all-recursiveprocess_begin: CreateProcess(NULL, make原创 2020-05-23 14:55:50 · 1910 阅读 · 4 评论 -
MinGW gcc 生成动态链接库 dll 的一些问题汇总
网络上关于用 MinGW gcc 生成动态链接库的文章很多。介绍的方法也都略有不同。这次我在一个项目上刚好需要用到,所以就花了点时间将网上介绍的各种方法都实验了一遍。另外,还根据自己的理解试验了些网上没有提到的方法。这里,我就将这两天获得的成果总结一下。 首先说一下我的开发环境:gcc version 4.9.2 (Rev1, Built by MSYS2 project)Targ原创 2015-01-11 17:25:51 · 43516 阅读 · 8 评论 -
C++ 中的智能指针
C++ 中的智能指针长久以来 C++ 最被人诟病的就是它的内存管理,写个稍微复杂点的程序就经常会碰到内存泄漏问题。为了解决这个问题,C++ 也做了许多努力。在 C++98 标准中首先提出了智能指针的概念,引入了 auto_ptr。但是在实践中,auto_ptr 有不少问题。因此在 C++11 标准中对原有的智能指针又做了进一步的升级,根据应用场景的不同,分成了 shared_ptr, weak_pt原创 2017-09-03 14:23:33 · 1070 阅读 · 0 评论 -
C++ 复制构造函数不能用 explicit 修饰
最近在写的一个代码。出现个莫名其妙的编译问题。代码可以简化成这样:class foo{public: foo(); explicit foo(int a){m_a = a;} explicit foo(foo &a) {m_a = a.m_a;}private: int m_a;};int main(){ foo x; foo b = x;原创 2017-06-15 12:46:35 · 2137 阅读 · 5 评论 -
Qt(C++)项目中使用 Basler 工业相机(图像获取策略)
Qt(C++)项目中使用 Basler 工业相机(图像获取策略)Pylon 中的 CInstantCamera 类支持四种图像获取策略,分别称为:One by One Grab StrategyLatest Image Only Grab StrategyLatest Images StrategyUpcoming Image Grab Strategy下面就简单写写这几种策略的含义和区别原创 2017-07-11 20:31:21 · 9534 阅读 · 11 评论 -
C++ 中 public、protected 及 private 的作用总结
C++ 中 public、protected 及 private 的作用总结C++ 中 class 的访问权限分的很细,有 public、protected 及 private 三种,派生子类时又有三种派生类型,搭配起来就有 9 中不同的组合了。下面用一张表总结了这些搭配的不同。其中,括号中的时在派生类中这些成员变量(函数)的角色。 成员变量修饰符 类外的普通函数 public 派生类原创 2017-06-04 14:17:50 · 7147 阅读 · 0 评论 -
pkg-config 用法简介
pkg-config 用法简介当我们写代码时,经常会调用第三方的库。这些第三方的库的安装路径在每台电脑上可能都会不同。所以如果我们把这些库的路径写死,那么别人拿到我们的代码编译时就会遇到各种问题。为了解决这个问题,就有了 pkg-config。这里要多说一句 pkg-config 是个 linux 下的工具,在 windows 下虽然也能用,但是用的人很少。简单的说 pkg-config 维护了一个原创 2017-06-03 11:30:17 · 13300 阅读 · 1 评论 -
Visual Stdio 环境下使用 GSL (GNU Scientific Library)
Visual Stdio 环境下使用 GSL (GNU Scientific Library)GNU Scientific Library (GSL)是一个开源的科学计算的函数库,功能非常强大。网上介绍它的文章很多,而且 GSL 的文档也写的非常的好,属于那种特别容易上手的函数库。这里就不多对 GSL 进行介绍了。今天要讲的是如何在 Visual stdio 环境下使用这个库。其实这方面的内容网上也原创 2015-08-15 20:31:11 · 8855 阅读 · 26 评论 -
游戏手柄(JoyStick)编程学习笔记(2)
在我的上一篇博客中(http://blog.youkuaiyun.com/liyuanbhu/article/details/51714045),介绍了通过 multimedia joystick API 来访问游戏手柄的基本方法。最后说到了利用 joySetCapture 函数监听手柄事件的方式并不是非常的好用。建议大家字节写个监听线程,有针对性的监听需要的事件。这里,我把我以前写的一份代码放上来。代码是基于 Qt 的,监原创 2017-02-01 18:13:32 · 17834 阅读 · 2 评论 -
给 MSYS2 添加中科大的源
最近一段时间不知怎么的,使用默认的 MSYS2 源升级软件或是安装新软件的特别的慢。所以就翻了翻国内的几个开源软件的镜像库,发现中科大的库里就有 MSYS2。所以就研究了一下,给 MSYS2 添加了中科大的源。简单的说 msys64\etc\pacman.d 目录下有三个文件。 mirrorlist.msys mirrorlist.mingw64 mirrorlist.mingw32这三个文件原创 2017-02-22 20:40:42 · 13183 阅读 · 3 评论 -
DIY 空气质量检测表
DIY 空气质量检测表前几天逛淘宝看到有空气颗粒物浓度测量的传感器,直接是 3.3V TTL 电压串口输出的,也不贵,也就 100 多一点。觉得挺好就买了个,这两天自己捣鼓了个小程序,搞了个软件界面的空气质量检测表。程序写的很简单,但是感觉这个小软件还是挺实用的,所以就写篇博客,大家用我的代码很容易就自己 DIY 一套。硬件准备传感器用的是 攀藤科技 PMS7003M 。除了攀藤科技,还有几家这种传原创 2017-01-21 13:34:36 · 5654 阅读 · 5 评论 -
Visual Studio 编译 MPIR 方法小节
Visual Studio 编译 MPIR 方法小节MPIR 是一个用于高精度计算的数值计算库,提供了对大整数和高精度有理数的支持。MPIR 是从 GMP 派生出来的项目,GMP 相比大家都听说过,是一套高度优化的任意精度数值计算库。许多很著名的软件在内部都用到了 GMP,比如 gcc。 但是 GMP 有一个问题,就是它里面有大量的汇编代码,这些代码无法在 MSVC 平台下编译。为此,就衍生出了 M原创 2017-10-18 21:37:35 · 2748 阅读 · 0 评论 -
qt 程序中读取 DXL360 倾角仪的数据
最近需要测量水平倾角,就从网上找了个 DXL360 倾角仪。就是下面照片里这东西。 这东西说实话挺山寨的,我现在也没搞明白网上那么多品牌到底是谁山寨谁。反正就是买了几个,凑合用吧。这东西提供了个 USB 接口,插在电脑上之后会虚拟出个Serial port。因此读取数据就是从串口中获取数据之后解析一下。没什么难度,代码放这里做个备忘,希望对大家也能有用。DXL360 通过串口传来的数据格式为 X+原创 2017-10-28 21:12:56 · 1663 阅读 · 0 评论 -
介绍几个 可以用在 C/C++ 语言里的画函数图像的库
gnuplothttp://stahlke.org/dan/gnuplot-iostream/git clone https://github.com/dstahlke/gnuplot-iostream.gitplplothttps://plplot.sourceforge.netvcpkg 已经包含这个包了。可以直接 vcpkg install plplotdislinhttps:...原创 2019-10-04 10:50:05 · 5436 阅读 · 0 评论 -
OpenMP 学习笔记
OpenMP 学习笔记什么是 OpenMPOpenMP 是一种用于共享内存并行系统的并行计算方案,支持的编程语言包括 C、C++ 还有 Fortran。简单的说 OpenMP 是利用 CPU 多线程技术加速计算的一套方案。并且是为不熟悉多线程技术的开发人员准备的。程序员通过在源代码中加入专用的 pragma 来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通...原创 2019-09-13 22:55:46 · 2084 阅读 · 1 评论