C++ VC
qq_24127015
本人目前从事C++开发
展开
-
word中px,pt,dpi,in,em,twip,emu之间的关系
inch英寸英寸是使用于联合王国(UK,即英国(英联邦)及其前殖民地)的长度单位,英文简写in,1in=2.54cm,12英寸为1英尺,36英寸为1码。英寸的符号为"ptpoint,磅,是一个物理长度单位,指的是72分之一英寸1inch = 72pt,1pt = 1/72inchpxpixel,像素,是一个虚拟长度单位,是计算机系统的数字化图像长度单位,如果px要换算成物理长度,需要指定DPI(Dots Per Inch,每英寸像素数),在扫描打印时一般都有DPI可选。windows原创 2021-08-11 15:45:14 · 3701 阅读 · 0 评论 -
Qt 获取一个图片中,单条直线指定颜色的宽度(QImage,QRgb)
目录运行效果测试图片代码:dialog.hdialog.cpp运行效果测试图片代码:dialog.h#ifndef DIALOG_H#define DIALOG_H#include <QDialog>namespace Ui {class Dialog;}class Dialog : public QDialog{ Q_OBJECTpublic: explicit Dialog(QWidget *...原创 2021-07-30 15:29:36 · 620 阅读 · 0 评论 -
Qt 画一个时钟
源码:lclock.h#ifndef LCLOCK_H#define LCLOCK_H#include <QWidget>#include <QTime>class LClock : public QWidget{ Q_OBJECTpublic: explicit LClock(QWidget *parent = nullptr);protected: void paintEvent(QPaintEvent* event) ov..原创 2021-03-18 14:30:20 · 256 阅读 · 0 评论 -
快乐数的计算,使用哈希set
这道题是letcode上的一道题:https://leetcode-cn.com/leetbook/read/hash-table/xh1k9i/编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为1,那么这个数就是快乐数。如果 n 是快乐数就返回 true ;不是,则返回 false 。示例 1:输入:19输出...原创 2021-02-26 16:32:03 · 162 阅读 · 0 评论 -
C++内存探究
我首先写了一个example1#include <stdio.h>int sum;//全局变量const double pi = 3.14;//静态全局变量// 函数int add(int a, int b){ printf("add.a:0x%0x,add.b:0x%0x\n",&a,&b);//函数内的局部变量 int c = a + b; printf("add.c:0x%0x\n",&c); return a + b;}int ma原创 2020-07-07 16:09:29 · 610 阅读 · 0 评论 -
C++ 避免线程死锁
死锁:多个线程因争夺资源而产生相互等待的现象。产生条件:互斥 占有并等待 不可抢占 循环等待危害:当以上四个条件满足时,必然会造成死锁。发生死锁的进程无法进行下去,它所占有的资源也无法释放。避免死锁主要有 3种方式加锁顺序 加锁时限 死锁检测加锁顺序一个线程如果要获取多个锁,必须按照一定的顺序去获取,比如要获取A B C 三把锁,我们规定,必须获取到了 AB 两把锁...转载 2020-04-21 10:41:41 · 761 阅读 · 0 评论 -
C++ 单元测试(转)
什么是单元测试单元测试是软件开发过程中的一种质量保证手段。最初的来源是想模仿对硬件芯片做单元测试那样,在软件中也能对小的软件单元进行测试,从而保证软件中某个局部设计的正确性。传统的单元测试定义传统软件单元测试将被测单元的粒度规定为软件中最小的功能模块。对于C语言通常指一个函数,对于Java或者C++语言通常指一个类。传统做法是针对被测单元的实现细节进行各种白盒测试,即针对被测代码的...转载 2020-04-20 16:40:24 · 2197 阅读 · 0 评论 -
C++ 面试题,单向链表只知道当前节点,怎么快速删除该节点
p是当前节点,q是p的下一节点,快速删除当前节点p?q= p->next;p->data = q->data;p->next=q->next;delete q;原创 2020-04-10 14:02:28 · 424 阅读 · 0 评论 -
C++ 设计模式:外观模式
外观模式外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。介绍意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更...原创 2020-04-09 17:39:35 · 199 阅读 · 0 评论 -
C++ 设计模式:装饰器模式
装饰器模式装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。介绍意图...原创 2020-04-09 16:08:01 · 375 阅读 · 0 评论 -
C++ 设计模式:组合模式
组合模式组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的层次结构。介绍...原创 2020-04-09 14:33:53 · 211 阅读 · 0 评论 -
C++ 设计模式:过滤器模式
过滤器模式过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。实现我们将创建一个Person对象、Criteria接口和实现了该接口的实体类,来过滤Person对象的...原创 2020-04-09 13:35:53 · 1716 阅读 · 1 评论 -
C++ 设计模式:桥接模式
桥接模式桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象类方法但是不同...原创 2020-04-09 09:57:08 · 168 阅读 · 0 评论 -
C++ 设计模式:MVC模式
MVC 模式MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。Model(模型)- 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。 View(视图)- 视图代表模型包含的数据的可视化。 Controller(控制器)- 控制器作用于模型和视图上。它控制数据流向模型...原创 2020-04-08 17:33:24 · 4468 阅读 · 1 评论 -
C++ 设计模式:观察者模式
观察者模式当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。示例代码:subject.h#pragma once#include <list>using na...原创 2020-04-08 16:45:52 · 118 阅读 · 0 评论 -
C++ 设计模式:原型模式
原型模式原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,...原创 2020-04-08 14:03:43 · 434 阅读 · 0 评论 -
C++ 设计模式:建造者模式
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。介绍意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决:主要解决在软件系统中,有时候面临着"一个复杂...原创 2020-04-08 11:39:13 · 186 阅读 · 0 评论 -
C++ 设计模式:单例模式
单例模式(singleleton pattern)这种模式涉及到一个单一的类,该类负责自己对象的创建,同时确保只有一个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。介绍 意图:保证一个类仅有一个实例,并提供一个访问它的全...原创 2020-04-03 14:27:42 · 213 阅读 · 0 评论 -
C++ 设计模式:抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂的模式。这个超级工厂又称为工厂的工厂。介绍意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。主要解决:主要解决接口选择的问题。何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。如何解决:在一个产品族里面,定义多个产品。关键代码:在一个工厂...原创 2020-04-03 13:39:31 · 199 阅读 · 0 评论 -
C++ 设计模式:工厂模式
工厂模式(Factory Pattern)是最常用的设计模式之一,属于创建型模式,他提供了一种创建对象的最佳方式。工厂模式,我们在创建对象时,不会暴露创建逻辑,并且是通过调用统一的接口来指向新创建的对象。何时使用:我们计划在不同条件下创建不同的对象。代码示例:// Shape.h#pragma onceclass Shape{public: Shap...原创 2020-04-01 16:34:16 · 170 阅读 · 0 评论 -
C 读取一个文件,按行读取,逗号分隔、去除前后空格,字符串转double,然后保存在两个vector中
DataProc.h#pragma once#include <vector>using namespace std;class CDataProc{public: CDataProc(); ~CDataProc();public: bool readDptFile(const char* In_FilePath, vector<double> &a...原创 2020-03-23 11:05:40 · 643 阅读 · 0 评论 -
vs coredump
转载:https://blog.csdn.net/tojohnonly/article/details/72845022Dump 文件是进程的内存镜像 , 可以把程序的执行状态通过调试器保存到dump文件中 ; Dump 文件是用来给驱动程序编写人员调试驱动程序用的 , 这种文件必须用专用工具软件打开 , 比如使用 WinDbg , VisualStudio 打开 ;当我们的程序发布出去之...转载 2020-03-23 08:45:41 · 335 阅读 · 0 评论 -
C++11 std::function和bind
std::function是可调用对象的包装器,它最重要的功能是实现延时调用:// threadTest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <functional>using namespace std;void func(void){ cout ...原创 2020-03-16 09:26:39 · 107 阅读 · 0 评论 -
C++ 11 线程 condition_variable
condition_variable (C++11) provides a condition variable associated with astd::unique_lock condition_variable(C ++ 11)提供与std :: unique_lock关联的条件变量Examplecondition_variabl...原创 2020-03-13 16:22:26 · 181 阅读 · 1 评论 -
C++11 std::ref和引用的区别
std::ref只是尝试模拟引用传递,并不能真正变成引用,在非模板情况下,std::ref根本没法实现引用传递,只有模板自动推导类型时,ref能用包装类型reference_wrapper来代替原本会被识别的值类型,而reference_wrapper能隐式转换为被引用的值的引用类型。std::ref主要是考虑函数式编程(如std::bind)在使用时,是对参数直接拷贝,而不是引用其中代表...原创 2020-03-12 17:33:37 · 1455 阅读 · 1 评论 -
C++ 11 线程 promise、future、async、packaged_task
1.promise和futurefuture和promise的作用是在不同线程之间传递数据。使用指针也可以完成数据的传递,但是指针非常危险,因为互斥量不能阻止指针的访问;而且指针的方式传递的数据是固定的,如果更改数据类型,那么还需要更改有关的接口,比较麻烦;promise支持泛型的操作,更加方便编程处理。假设线程1需要线程2的数据,那么组合使用方式如下:线程1初始化一个promise对...原创 2020-03-12 16:11:06 · 389 阅读 · 0 评论 -
C++11 线程 lock_gurad
Themutexclass is a synchronization primitive that can be used to protect shared data from being simultaneously accessed by multiple threads.mutexoffers exclusive, non-recursive ownership semantic...原创 2020-03-12 11:15:06 · 144 阅读 · 0 评论 -
C++ 11 线程sleep_until
头文件:<thread> (C++11)template<class Clock, class Duration>void sleep_until(const std::chrono::time_point<Clock, Duration>& sleep_time);作用:阻塞当前正在执行的线程直到sle...原创 2020-03-12 09:49:19 · 3173 阅读 · 0 评论 -
C++11 线程 sleep_for
#include "stdafx.h"#include <iostream>#include <chrono>#include <thread>int main(){ using namespace std::chrono_literals; std::cout << "Hello waiter\n" << std::f...原创 2020-03-12 09:35:52 · 5969 阅读 · 0 评论 -
C++11 线程 std::thread::joinable
std::thread::joinableChecks if thestd::threadobject identifies an active thread of execution. Specifically, returnstrueifget_id()!=std::thread::id(). So a default constructed thread is not jo...原创 2020-03-11 16:06:07 · 1380 阅读 · 0 评论 -
C++11 线程join,detach
1 join()waits for a thread to finish its execution;等待线程执行完毕。join 是让当前主线程等待所有的子线程执行完,才能退出// threadTest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <thread&g...原创 2020-03-11 15:22:12 · 162 阅读 · 0 评论 -
C++ 线程 获取线程id
#include "stdafx.h"#include <iostream>#include <thread>#include <string>#include <chrono>#include <mutex>#include <windows.h>using namespace std;std::mute...原创 2020-03-11 13:51:33 · 5704 阅读 · 0 评论 -
C++ thread::hardware_concurrency 获取硬件支持并发数
一、功能获取硬件支持的并发线程数二、返回值正常返回支持的并发线程数,若值非良定义或不可计算,则返回0三、形参无四、示例#include <iostream>#include <thread>int main(){ unsigned int in = std::thread::hardware_concurrency();...原创 2020-03-11 13:12:45 · 8077 阅读 · 0 评论 -
C++11 线程,有参线程的创建方法
// threadTest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <thread>#include <string>using namespace std;void hello(string& msg,int idx){ cout ...原创 2020-03-11 11:15:56 · 397 阅读 · 1 评论 -
C++11 线程,无参线程的创建方法
// threadTest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <thread>using namespace std;void hello(){ cout << "hello thread1 world" << endl;}...原创 2020-03-11 10:17:27 · 588 阅读 · 0 评论 -
c++UDP服务端与客户端程序,客户端向服务端发送日志信息,可用于获取客户端的工作日志
服务端:// UdpSrv.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <WinSock2.h>#include <stdio.h>#include <iostream>#include <Windows.h>#include <string>#pragma...原创 2020-03-03 17:20:23 · 510 阅读 · 0 评论 -
C++ explicit
C++提供了关键字explicit,声明为explicit的构造函数不能在隐式转换中使用。1)C++的类型转换分为两种,一种为隐式转换,另一种为显式转换。2)C++中应该尽量不要使用转换,尽量使用显式转换来代替隐式转换。1隐式转换定义:隐式转换是系统跟据程序的需要而自动转换的。1)C++类型(char,int,float,long,double等)的隐式转换: 算...原创 2020-02-20 16:22:28 · 8599 阅读 · 0 评论 -
C++ 智能指针的使用 1.unique_ptr
1.一种强引用用法独占它是我的所有物,你们都不能碰它!”——鲁迅正如它的名字,独占 是它最大的特点。内部大概实现:它其实算是auto_ptr的翻版(都是独占资源的指针,内部实现也基本差不多).但是unique_ptr的名字能更好的体现它的语义,而且在语法上比auto_ptr更安全(尝试复制unique_ptr时会编译期出错,而auto_ptr能通过编译期从而在运行期埋下...原创 2020-02-20 15:35:51 · 163 阅读 · 0 评论 -
C++ 智能指针的使用 1.auto_ptr
1.普通指针的用法:// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <memory>using namespace std;class Monster{public: Monster(){ cout <...原创 2020-02-20 15:26:27 · 153 阅读 · 0 评论 -
C++ 最大子和序列2
这个子序列,我们可以想象,它既然是最大的,表明这个子和的第一个元素()和最后一个元素,肯定不能是一个负数。算法描述:T(N) = O(N)1.设置两个变量maxSum用于保存最大子和,maxSum初始值为A[0],currentSum用于保存当前子和,初始值为0。2.遍历数组,currentSum和当前元素相加,然后和maxSum比较,如果大于maxSum,那么maxSum = cur...原创 2020-02-19 12:04:45 · 311 阅读 · 0 评论