自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (1)
  • 收藏
  • 关注

原创 统一C语言风格定义各种数据结构及基本操作——顺序表基本操作

/*sqlist.h*/#pragma once//实现顺序表常用操作代码#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#define INIT_SIZE 5 //线性表存储空间初始分配量#define INCREASE_SIZE 10 //线性表存储空间分配增量typedef int ElemType; //定义元素类型为int ty

2021-05-23 22:40:23 347

原创 统一C语言风格定义各种数据结构及基本操作——单链表基本操作

/*linklist.h*/#pragma once#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>typedef int ElemType; //定义数据元素类型为inttypedef struct LNode { //线性表的链式存储结构定义 ElemType data; struct LNode* next;}LNode, *LinkList;//建立带头节点的单链表L

2021-05-23 22:24:24 315

原创 统一C语言风格定义各种数据结构及基本操作——单向循环链表基本操作

/*cyclelinklist.h*/#pragma once#include<stdio.h>#include<stdlib.h>typedef int ElemType; //定义数据元素类型为inttypedef struct CLNode { //线性表的链式存储结构定义 ElemType data; struct CLNode* next;}CLNode, *CLinkList;//建立带头节点的单链表L,输入n个元素的值CLinkList cre

2021-05-23 22:18:37 371

原创 统一C语言风格定义各种数据结构及基本操作——双向循环链表基本操作

/*doublecyclelinklist.h*/#pragma once#include<stdio.h>#include<stdlib.h>typedef int ElemType; //定义数据元素类型为inttypedef struct DCLNode { //双向循环链表存储结构定义 ElemType data; struct DCLNode* prior; struct DCLNode* next;}DCLNode, *DCLinkList;//

2021-05-23 22:12:16 291

原创 统一C语言风格定义各种数据结构及基本操作——栈基本操作

/*stack.h*/#pragma once/*采用顺序表存储栈中元素*/#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#define STACK_INIT_SIZE 10 //初始化栈的容量#define STACK_INCREASEMENT 2 //每次增加的栈的容量typedef int ElemType;typedef struct SqS

2021-05-23 22:02:15 371

原创 统一C语言风格定义各种数据结构及基本操作——顺序队列基本操作

/*sqqueue.h*/#pragma once#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>#include<stdlib.h>#define QMAXSIZE 10typedef int ElemType;typedef struct SqQueue { ElemType* base;//动态存储区 int front;//头指针 int rear;//尾指针}SqQueue,*pSqQueue;//

2021-05-23 21:49:52 310

原创 统一C语言风格定义各种数据结构及基本操作——链队列基本操作

/*linkqueue.h*/#pragma once#include<stdio.h>#include<stdlib.h>typedef int ElemType;typedef struct LNode { //线性表的链式存储结构定义 ElemType data; struct LNode* next;}LNode, *LinkList;typedef struct LinkQueue {//队列存储结构 LinkList front;//队头指针 Li

2021-05-23 21:43:29 349

原创 统一C语言风格定义各种数据结构及基本操作——二叉树基本操作

/*bittree.h*/#pragma once#include<stdio.h>#include<stdlib.h>#define MAXNODE 10typedef int ElemType;typedef struct BitNode {//二叉树存储结构定义 ElemType data; struct BitNode *lchild, *rchild;}BitNode,*BitTree;//初始化空树,1表示初始化成功,0表示初始化失败int ini

2021-05-23 21:32:58 388

原创 【Java】AOP+注解实现前后端传参加解密

【代码】【Java】AOP+注解实现前后端传参加解密。

2023-06-02 10:20:42 2853

原创 C++读写txt文档

/*<ifstream> :从已有文件读<ofstream> :向指定文件写<fstream> : 打开文件供读写*/#include<fstream>void main(){ /*文件打开模式: *ios::in 只读 *ios::out 只写 *ios::app 从文件末尾开始写,防止丢失文件中原来就有的内容 *ios::binary

2022-01-27 17:17:12 4435

原创 C++实现TCP/IP客户端与服务端通信——Windows+基础版+分解版

服务端只能够同时连接一个客户端并与其通信实现客户端与服务端简单字符串通信(字符串长度有限制)服务端能够获取所连接客户端的IP与端口号/******************服务端********************/#include <Ws2tcpip.h>//htons()等函数#include "winsock2.h"//bind()、listen()等函数#pragma comment(lib, "ws2_32.lib")//静态链接库#include <iost.

2022-01-24 10:31:29 1821 3

原创 C++实现TCP/IP客户端与服务端通信——Windows+基础版+合并版

/**客户端与服务端的实现代码分别封装在两个函数中,可以在主函数中通过选择分别执行客户端或服务端代码*实现客户端与服务端简单字符串通信(字符串长度有限制)*服务端只能够同时连接一个客户端并与其通信*服务端能够获取所连接客户端的IP与端口号*/#include <Ws2tcpip.h>//htons()等函数#include "winsock2.h"//bind()、listen()等函数 //第2版本的网络库#pragma comment(lib, "ws2_32.li

2022-01-18 21:23:19 3387

原创 C++11——Variadic Templates(可变模板)

引入可变模板用于函数模板例1:打印一组数例2:一组数比大小可变模板用于类模板引入可变模板是C++11中非常重要也是非常值得探讨的一个语法。首先它是一个模板,可以是函数模板,也可以是类模板;其次可变也有两层含义,一方面是指模板参数的个数可变,另一方面是指模板参数的类型可变。实现可变模板的关键字说起来非常简单,就是三个点(即…,我在后面将其统一称为可变模板关键字),和汉语中的省略号很相似,都有数量不定的意思,而且可变模板本身其实也就只有这一个意思,只是用户通过递归的技巧可以设计出让人惊诧的应用。可变模.

2022-01-06 22:44:02 1317

原创 C++11——lambda表达式详解

引入lambda表达式形式上比较让人难以理解,但假如我们把它整体当作一个对象,且该对象所对应的类型重载了()运算符。即把lambda表达式的调用与函数对象类比,会容易理解很多。仿函数的极简形式如下://lambda表达式[]{cout << "hello lambda" << endl;};VS//重载()的类class Functor{public: void operator()(){ cout << "hello functor"<&l

2022-01-04 21:58:40 1591

原创 C++11——decltype(提取表达式类型)

在C++2.0之前,其实已经有提取对象类型的方法,只是功能很弱:#include<typeinfo>#include<vector>#include<iostream>using namespace std;int main(){ vector<int> v1; cout << "v1:"<<typeid(v1).name() << endl; //typeid(v1).name() v2;//error:

2022-01-01 19:41:56 1609

原创 C++11——Type Alias(类型化名)、noexcept(异常)、override(重写)、final(终止继承/重写)

Type Alias和typedef类似,甚至可以说作用一模一样,都是给类型起别名,Type Alias需要借助关键字using。有三种使用场景:场景1:给函数指针起别名//typedef void (*func)(int,int);//C语言就有的写法,这里定义了一个函数指针类型——func,指向的函数类型有两个int类型参数,返回值为void。只是显然这种语法无法凸显出func是一个类型using func=void(*)(int,int);//使用这样的类型化名方式就可以很清晰的表明func是

2021-12-31 22:31:12 884

原创 C++11——Alias Template(化名模板)、Template template parameter(模板模板参数)

Alias Template无论是形式还是使用都非常简单,例如:template <typename T>using Vec=vector<T,MyAlloc<T>>;//在这里vector为STL容器,MyAlloc为自定义的分配器......Vec<int> v;//使用时可以传入模板参数,且可以简化书写从上面的例子来看,Alias Template的作用就是简化书写以及可以传入模板参数,就从这一点,功能与#define和typedef相似甚至

2021-12-30 14:42:04 1239

原创 C++11——=delete与=default

在C++2.0之前存在Big Three的说法,即类中的三大函数:析构函数、拷贝构造函数、拷贝赋值函数。C++2.0之后添加了移动(&&)语义,扩展至Big Five,即类的五大函数:析构函数、拷贝构造函数、移动构造函数、拷贝赋值函数、移动赋值函数。(疯狂吐槽一下,Big Three和Big Five中为什么没有构造函数。)对于一般的类,构造函数与Big Three在用户没有手动定义的前提下,编译器会生成默认版本,且假如类中没有指针类的数据成员,默认版本一般已经够用,不需要用户额外定义

2021-12-28 10:08:46 691

原创 C++11——基于范围的for循环

基于范围的for循环是C++2.0中除了auto关键字外另一个非常实用且简单的小工具,用于实现容器中的数据的遍历,具体形式如下:/**decl:变量的声明*coll:已定义好的容器*/for(decl:coll){ statement}使用的方式也很简单:for(int i:{1,2,3,4,5}){ cout<<i<<endl;}上面的例子编译器会形成一个initializer_list,背后关联一个容器array<int,5>,{}中的数据

2021-12-22 10:13:24 851

原创 C++11——explicit关键字

explicit关键字在C++2.0之前已经有了,一般只用于修饰构造函数,用于防止隐式转换。有一个专业术语很拗口,叫nonexplicit one argument constructor,特指只有第一个形参没有默认值,其他形参都有默认值的构造函数,拥有这类构造函数的类可以发生隐式转换。explicit关键字就是用于修饰nonexplicit one argument constructor隐式转换并不是不好,而是根据需求用户可以通过是否加explicit关键字来决定需要或者杜绝隐式转换。class

2021-12-21 22:52:16 1039 1

原创 C++11——一致性初始化(Uniform initialization)、初始化列表(Initializer List)

在C++11之前,初始化的形式多样,包括小括号、大括号以及复制运算符,例子如下:class Base {public: Base(int a, int b, int(*area)(int, int)) { cout<<area(a, b)<<endl; }};int area(int a, int b) { return a*b;}......void test(){ int a=1;//使用赋值运算符初始化 int b(1);//使用小括号初始化 in

2021-12-20 10:04:06 1050

原创 C++编程习惯集锦

数据成员的访问权限务必设为private对于成员函数若已知不会改变对象的数据成员,务必用const修饰(这样在将一个模块交付用户使用时可以避免出错)。例如:T getValue()const{return instacne;}//若该函数没有const修饰,那么用户定义一个const对象来调用该函数编译就会报错,因为const对象只能调用const函数,但站在用户的角度来看,使用一个const对象调用一个不需要改变数据成员的函数本身并没有错,因此这里只能是接口设计者的错误了。接口设计者在确定成员函数.

2021-12-14 16:34:47 2052

原创 C++指针与引用的区别

指针和引用的区别①指针是一个变量,存储一个成员的地址;引用是一个常量(指针常量),相当于一个成员的别名②指针声明和定义可以分开;引用声明时必须初始化int* a;//指针声明a=new int(1);//指针定义int& b=a;//引用初始化③指针可以改变指向;引用一旦初始化就不可改变④指针可以指向空值;引用不可为空⑤在32位编译器上,指针的sizeof为4个字节;引用的sizeof为所指向成员的大小(引用本质是指针,本身占四个字节)⑥指针可以有多级;引用只有一级⑦在传参时,

2021-11-29 21:58:37 921

原创 C++中输入/输出运算符为什么一般不作为类的成员函数重载

(我被灌输的第一印象是输入输出运算符不能重载成成员函数,后来发现不是不能,而是习惯上的选择。)众所周知,作为类的非静态成员函数,第一个参数隐藏为this指针,这样才能被对象调通过 obj.fun() 的方式实现调用。若将输入/输出运算符重载为成员函数:#include<iostream>using namespace std;class Data{private: int a; int b;public: Data() { a = 0; b = 0; cout <&lt

2021-11-29 20:38:34 1666 1

原创 在C++中如何对自定义类型做hash操作

概述哈希函数(hash function)的目的时根据给定对象算出一个哈希码(hash code),使得对象经过hash code映射之后能够乱且随机地被放置在哈希表(hashtable)中,从而尽量避免发生哈希碰撞。C++标准库中提供地hash函数版本如下(使用偏特化,对于数值型地数据hash函数得到地hash code就是原值,对于字符串则提供了专门地hash表达式):template<class key> struct hash{};//泛化//偏特化template<&g

2021-11-23 17:23:24 8582 9

原创 C++多态详解

C++多态详解引言虚函数与多态虚函数多态虚析构纯虚函数和抽象类总结引言多态是面向程序设计语言中数据封装和继承之外的第三个基本特征。多态性(polymorphism)提供接口与具体实现之间的另一层隔离,从而将“what”和“how”分离开来。多态性改善了代码的可读性和组织性,同时也使得创建的代码就有具有展性。C++支持编译时多态(静态多态) 和 运行时多态(动态多态),运算符重载和函数重载是编译时多态(运算符重载本质上也是函数重载,要求函数名相同,但形参列表中参数个数、类型、类型顺序三者至少有一个不同,

2021-05-30 08:51:19 1256

原创 C++STL map/multimap容器

1、map/multimap容器简介map 的特性是所有的元素都会根据元素的键值自动排序。map所有元素都是pair(对组),同时拥有实值和键值,pair的第一元素被认为是键值。不能通过map的迭代器改变map的键值,因为map的键值关系到map元素的排序规则,任意改变map的键值将会破坏map组织。如果想修改map的实值是可以的。map和list拥有相同的某些性质,在对容器进行插入或删除操作时,除了删除元素外其他所有元素的迭代器依然有效。multimap和map的操作类似,唯一区别是multim

2021-05-26 23:00:47 413

原创 C++STL set/multiset容器

C++STL set/multiset容器1、set/multiset容器简介2、API3、使用insert、erase对组(pair)lower_bound、upper_bound更改set排序规则1、set/multiset容器简介set元素的特性是所有元素都会根据元素的键值自动排序。set的元素不像map可以同时拥有实值和键值,set的元素既是实值也是键值。set不允许两个元素有相同的键值。不能通过set的迭代器改变set元素的值,因为set的元素值就是键值,关系到set元素的排序规则,如果任意

2021-05-25 22:59:25 487

原创 C++STL list容器

1、list容器简介链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为一个结点)组成,结点可以在运行时动态生成。每个结点包括两部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相较于vector的连续线性空间,list的好处是每次插入或者删除一个元素,就配置或者释放一个元素的空间。list对空间的运用绝对精准,不浪费。对于任何位置的元素插入或删除,list永远是常数时间。采用动态存储分

2021-05-24 23:01:32 422

原创 C++STL deque容器

1、deque VS vectordeque被称为双端动态数组。deque插入和删除的时间是一个常数(不会因为数据量的大小改变操作所耗时)deque容器没有容量的概念,动态的以分段连续空间组成,随时可以增加一段新的空间并连接起来。deque的Random Access Iterator(随机访问迭代器)不是普通的指针,复杂度与vector不是一个量级,其运算效率大大降低。除非必要,尽可能用vector而不用deque。对deque进行排序时,为了提高效率,先将deque完整复制到vect

2021-05-21 21:01:38 381

原创 C++ STL vector容器详解

C++ STL vector容器详解1、vector VS array2、vector迭代器3、vector空间容量4、vector空间扩充5、vector函数接口6、vector容器存放自定义对象1、vector VS arrayvector的数据安排及操作方式与array非常相似,唯一差别在于空间运用的灵活性。array是静态空间,一旦配置就不能改变,要更换空间必须手动配置一块新的空间,再将旧的数据搬到新空间,再释放原空间。vector是动态空间,随着元素的加入,它的内部机制会自动扩充空间来容

2021-05-20 19:56:38 429

原创 C++STL所有容器底层数据结构概述

C++STL所有容器底层数据结构概述1、顺序容器1.1 vector1.2 deque1.3 list2、关联容器2.1 map & multimap & unordered_map & unordered_multimap2.2 set & multiset & unordered_set & unordered_multiset3、适配器3.1 queue3.2 priority_queue3.3 stack1、顺序容器1.1 vector头文件为

2021-05-19 11:25:19 877 1

原创 C++STL概述

STL概述1 简介2 六大组件3 优点1 简介STL(Standard Template Library),标准模板库。是惠普实验室开发的一系列软件的统称,现在主要用在C++中,但引入C++之前在该技术已经存在很长时间。STL从广义上分为容器、算法、迭代器,容器和算法之间通过迭代器进行无缝连接。STL几乎所有的代码都采用了模板类或者模板函数,这相比传统的函数和类组成的库来说提供了更好的代码重用机会。C++标准程序中隶属于STL的占到了80%以上。容器(container)、算法(algorit

2021-05-18 20:38:45 556

原创 C++实现十大排序算法

C++实现十大排序算法1 简单选择排序2 冒泡排序3 插入排序4 快速排序5 归并排序6 希尔排序7 堆排序8 计数排序9 桶排序10 基数排序1 简单选择排序存在一乱序数组A[0~n]第一步:以A[0]作为参考点,比较A[1~n], 遍历完数组后,寻找到最小值A[k](或最大值)的下标k值,然后交换swap(A[0],A[k]);第二步:以A[1]作为参考点,比较A[2~n], 遍历完数组后,寻找到最小值A[k](或最大值)的下标k值,然后交换swap(A[1],A[k]);第i步:以A

2021-05-18 16:51:49 517

原创 C++回调函数详解

1、什么是回调函数2、为什么需要回调函数3、什么函数可以作为回调函数

2021-05-10 13:52:04 20667 13

DHCamera.rar

大华相机的功能非常丰富,具体可以参考[大华官网](https://www.dahuatech.com/service/downloadlists/836.html),官网提供了像机API的详细说明文档以及很多比较成熟的demo。但有一个相对而言不太友好的地方在于,一方面文档读起来有时候会比较难懂,另一方面它提供的所有demo都是基于MFC,并且添加了许多特定用户级的功能,这相对于其他需要进行二次开发的应用者来说太冗余了,想要在这些demo中挑选自己想要的功能并转换到自己的平台上运行,代价其实还是挺高的。本项目正是在Qt5.10.1(编译器为MinGW53_32)平台下搭建的像机操控软件,该软件基于大华官网提供的SDK《SDK_C_Win32_V3.052.0000002.0.R.201103》,主要参考了文档《NetSDK编程指导手册》以及demo《22.热成像》,实现了云台运动控制、RGB图像获取、热成像获取、温度获取几个功能。

2021-06-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除