自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (8)
  • 收藏
  • 关注

原创 C++时间类 std::chrono

std::chrono

2022-04-15 11:09:19 4433

原创 C++线程 future使用,std::async、std::packaged_task、std::promise

future、async、packaged_task、promise

2022-04-13 17:39:45 1207

原创 C++17.std::scoped_lock类,同时获取多个锁

c++17 scoped_lock类

2022-04-13 14:38:19 1914

原创 cout打印16进制

#include <iomanip>#include <sstream>char buf[4096] = {0};//.......{ //打印输出 //输出16进制 std::stringstream ss; for(int i =0;i<size;++i) ss<<std::setfill('0')<<std::setw(2)<<std::hex<<(unsigned int)(unsigned cha

2021-09-26 09:46:19 4358

原创 c/c++时间类型

1、time_ttime_t 类型,这本质上是一个长整数,表示从1970-01-01 00:00:00到目前计时时间的秒数,如果需要更精确一点的,可以使用timeval精确到毫秒。time_t cur = time(NULL);2、struct timeval在time.h中的定义为:struct timeval{ __time_t tv_sec; /* Seconds. */ __suseconds_t tv_usec; /* Microseconds. */};

2021-08-26 15:50:07 2636

转载 C++ 静态对象与全局对象的构造顺序

C++ 编程规范-静态对象与全局对象的构造顺序静态对象与全局对象的构造顺序类中的静态对象类中的静态成员对象,即使没有被使用,也会被构造和析构。比如B类中的m_sa(类类型的静态成员变量),也会被分配内存。如果m_sa不是类类型,而是简单类型,比如double, int,那么源码中如果没有用到这个静态成员变量,编译器可能不会分配内存。函数中的静态对象:如果该函数没被调用,那么这个静态对象不会被构造和析构。全局对象如果该工程中每个源文件中都定义着一些不同的全局对象,那么全局对象的

2021-08-10 10:46:19 478

原创 解决win10微软应用商店打不开的问题

前几天更新了系统发现应用商店打不开了,网上找了很多方法Microsoft store应用商店无法加载页面代码: 0x80131500(总结版方法)都试了还是不行,用了360断网急救箱修复还是不行。最后终于解决。打开网络设置,选择能够使用你wlan数据的应用找到微软应用商店把开关打开就可以了...

2021-07-01 10:22:58 3017

原创 c++11 tuple元组

tuple元组是一个固定大小的不同类型值的集合,是泛化的std::pair。可以把它当成一个通用的结构体来用,不需要创建结构体又获取结构体的特征,在某些情况下可以取代结构体。1、构造一个tuple:std::tuple<const char*,int> tp = make_tuple("a",1);上面的tuple等价于一个结构体:struct A{ char* p; int len;};另一种可以创建元组的方法,利用std::tie,它会创建一个元组的左值引用。int

2021-04-22 16:54:50 208

原创 原子类型与C++11原子操作

原子操作即多线程程序中“最小的且不可并行化的”操作。通常对一个共享的资源的操作是原子操作的话,意味着多个线程访问资源时,有且仅有唯一一个线程在对这个资源进行操作。通常情况下,原子操作都是通过互斥的访问来保证的。例如使用POSIX标准的pthread库中的互斥锁来进行。#include <pthread.h>#include <iostream>using namespace std;static long long total = 0;pthread_mutex_t m

2021-04-06 17:21:35 309

转载 [c++11]右值引用、移动语义和完美转发

转自 [c++11]我理解的右值引用、移动语义和完美转发c++中引入了右值引用和移动语义,可以避免无谓的复制,提高程序性能。有点难理解,于是花时间整理一下自己的理解。左值、右值C++中所有的值都必然属于左值、右值二者之一。左值是指表达式结束后依然存在的持久化对象,右值是指表达式结束时就不再存在的临时对象。所有的具名变量或者对象都是左值,而右值不具名。很难得到左值和右值的真正定义,但是有一个可以区分左值和右值的便捷方法:看能不能对表达式取地址,如果能,则为左值,否则为右值。看见书上又将右值分为将

2021-04-02 11:00:08 104

转载 stl位图bitset用法

转自 bitset大法好bitset存储二进制数位。bitset就像一个bool类型的数组一样,但是有空间优化。bitset中的每个元素都能单独被访问,例如对于一个叫做a的bitset,表达式a[3]访问了它的第4个元素,就像数组一样。(但是输出单独访问结果不能用printf,和bitset有关的输出都用cout)另外bitset的大小在编译时就需要确定,也就是说bitset<>的尖括号中写的是大小。#include <iostream>#include <bit

2021-03-29 09:47:50 145

原创 QT<九> 文件系统

文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台的文件操作能力。Qt 通过QIODevice提供了对 I/O 设备的抽象,这些设备具有读写字节块的能力。下面是 I/O 设备的类图(Qt5):QIODevice:所有 I/O 设备类的父类,提供了字节块读写的通用操作以及基本接口;QFileDevice:Qt5新增加的类,提供了有关文件操作的通用实现。QFlie:访问本地文件或者嵌入资源;QTemporaryFile:创建和访问本地文件系统的临时文件;QBuffer:读写Q

2021-03-11 17:18:52 200

原创 QT<八> 绘图事件、绘图设备

Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制。整个绘图系统基于QPainter,QPainterDevice和QPaintEngine三个类。下图给出了这三个类之间的层次结构:上面的示意图告诉我们,Qt 的绘图系统实际上是,使用QPainter在QPainterDevice上进行绘制,它们之间使用QPaintEngine进行通讯(也就是翻译QPainter的指令)。一、QPainter 绘图1)绘图事件 void paintEvent()重写QWidget的paint

2021-03-11 15:29:32 586

原创 QT<七> 消息机制和事件、定时器

一、事件事件(event)是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件在对用户操作做出响应时发出,如键盘事件等;另一些事件则是由系统自动发出,如计时器事件。Qt 程序需要在main()函数创建一个QApplication对象,然后调用它的exec()函数。这个函数就是开始 Qt 的事件循环。在执行exec()函数之后,程序将进入事件循环来监听应用程序的事件。当事件发生时,Qt 将创建一个事件对象。Qt 中所有事件类都

2021-03-10 17:15:52 370

原创 QT<六> 界面布局、常用控件

一、界面布局所谓 GUI 界面,归根结底,就是一堆组件的叠加。Qt 提供了两种组件定位机制:绝对定位和布局定位。绝对定位:就是一种最原始的定位方法:给出这个组件的坐标和长宽值。这样,Qt 就知道该把组件放在哪里以及如何设置组件的大小。但是这样做带来的一个问题是,如果用户改变了窗口大小采用绝对定位的组件是不会有任何响应的。或者,还有更简单的方法:禁止用户改变窗口大小。布局定位:你只要把组件放入某一种布局,布局由专门的布局管理器进行管理。当需要调整大小或者位置的时候,Qt 使用对应的布局管理器进行调整

2021-03-10 11:36:13 1707

原创 QT<五> 对话框

一、对话框1、基本概念对话框通常会是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。Qt 中使用QDialog类实现对话框。就像主窗口一样,我们通常会设计一个类继承QDialog。QDialog(及其子类,以及所有Qt::Dialog类型的类)的对于其 parent 指针都有额外的解释:如果 parent 为 NULL,则该对话框会作为一个顶层窗口,否则则作为其父组件的子对话框(此时,其默认出现的位置是 parent 的中心)。 顶层窗口与非顶层窗口的区别在于,顶层窗口在任务栏会有

2021-03-09 15:17:50 1821

原创 QT<四> QMainWindow、资源文件

一、QMainWindowQMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等。1、菜单栏一个主窗口最多只有一个菜单栏。位于主窗口顶部、主窗口标题栏下面。1)创建菜单栏,通过QMainWindow类的menubar()函数获取主窗口菜单栏指针。QMenuB

2021-03-08 10:25:34 245

原创 QT<三> 信号和槽机制

一、信号和槽机制信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。1、连接函数 QObject::connect(const QObject *sender, cons

2021-03-05 16:12:30 162

原创 QT<二> 按钮、对象树、窗口坐标体系

一、按钮控件常用API创建按钮QPushButton *btn = new QPushButton;//创建按钮并设置文件和依附的窗口QPushButton ( const QString & text, QWidget * parent, const char * name = 0 )设置父亲void setParent(QWidget * parent);设置文本void setText(const QString &text);设置按钮位置

2021-03-05 13:52:04 205 1

原创 QT<一>

一、第一个QT程序1、QT的优点跨平台、接口简单容易上手、一定程度上简化了内存的回收。2、默认有窗口类基类有三种选择:QWidget、QMainWindow、QDlalog3、main函数#include "widget.h"#include <QApplication>//包含一个应用程序类的头文件int main(int argc, char *argv[]){ QApplication a(argc, argv);//a 应用程序对象,qt中,有且只有一个

2021-03-05 10:21:21 268 1

原创 智能指针

智能指针是行为类似于指针的类对象。模板auto_ptr是C++98提供的解决方案,C++11已将其摒弃,并提供了另外两种解决方案,unique_ptr和shared_ptr。1. 使用智能指针这三个智能指针模板(auto_ptr、unique_ptr和shared_ptr)都定义了类似指针的对象,可以将new获得(直接或间接)的地址赋给这种对象。当智能指针过期时,其析构函数将使用delete来释放内存。常规指针与auto_ptr的区别,如下图所示://创建int类型的智能指针#include &l

2021-03-03 17:15:15 534 1

原创 类型转换运算符

c++中4个类型转换运算符:dynamic_castconst_caststatic_castreinterpret_cast可以根据目的选择一个适合的运算符,而不是使用通用的类型转换。1、dynamic_cast假设High和Low是两个类,而ph和pl的类型分别为High* 和Low*,则仅当Low是High的可访问基类(直接或间接)时,下面的语句才将一个Low*指针赋给pl:否则,该语句将空指针赋给pl。该运算符的用途是,使得能够在类层次结构中进行向上转换(由于is-a关系,

2021-03-03 15:33:21 915 3

原创 多线程编程-1多线程基础

一、多线程的益处■ 提高应用程序的响应■ 更有效地使用多处理器■ 改进程序结构■ 占用较少的系统资源二、多线程概念1、并发性和并行性在单个处理器的多线程进程中,处理器可以在线程之间切换执行资源,从而执行并发。在共享内存的多处理器环境内的同一个多线程进程中,进程中的每个线程都可以在一个单独的处理器上并发运行,从而执行并行。2、用户级线程状态以下状态对于每个线程是唯一的。■ 线程 ID■ 寄存器状态(包括 PC 和栈指针)■ 栈■ 信号掩码■ 优先级■ 线程专用存储3、线程

2021-03-01 09:52:44 279

原创 服务器模型(二)

三、TCP的高级并发服务器模型注:linux网络编程 第14章读书笔记

2021-02-23 16:09:04 106

原创 服务器模型(一)

循环服务器:使用循环的方法逐个处理客户端连接,处理完一个之后再处理另一个。 并发服务器的简单模型:使用进程处理客户端的连接和请求。 并发服务器的TCP的分类:使用进程池或者线程池进行客户端请求的处理的框架和方法,并按照accept的处理情况进行不同状态的划分。 并发服务器模型中使用IO复用:使用同一处理模块监视多个客户端的连接并进行处理。一、循环服务器循环服务器指对于客户端的请求和连接,服务器在处理完一个之后再处理另一个,即串行处理客户端的请求。1、UDP循环服务器while循环作为主..

2021-02-22 18:04:52 206

原创 套接字选项、getsockopt()、setsockpt()、ioctl()、fcntl()

一、套接字选项1、getsockopt()、setsockopt()#include <sys/types.h>#include <sys/socket.h>int getsockopt(int s,int level,int optname,void* optval,socklen_t* optlen);//获得套接字选项设置情况int setsockopt(int s,int level,int optname,const void* optval,socklen_t

2021-02-20 17:09:19 853

原创 基于UDP协议的接收和发送

一、UDP编程框架分为客户端和服务端两部分。服务端主要包含建立套接字socket()、将套接字与地址结构进行绑定bind()、读写数据recvfrom()和sendto()、关闭套接字close()等几个过程。客户端包括建立套接字socket()、读写数据recvfrom()和sendto()、关闭套接字close()几个过程。1、UDP编程框图使用socket()建立套接字的类型与TCP不同,为数据报套接字。客户端和服务端之间的差别在于服务端必须使用bind()函数来绑定侦听的本地udp端

2021-02-19 10:19:59 2868

原创 IO模型、select()和pselsect()、poll()和ppoll()函数

一、IO模型IO的方式有阻塞IO、非阻塞IO、IO复用、信号驱动、异步IO等。1、阻塞IO阻塞IO是最通用的IO类型,在数据未到来之前程序会一直等待。2、非阻塞IO把套接字设置成非阻塞的IO,则对每次请求内核都不阻塞,会立即返回。当没有数据的时候会返回一个错误。3、IO复用IO复用模型可以在等待的时候加入超时的时间,当超市时间没有达到的时候与阻塞的情况一致。而超时时间达到仍没有数据,系统会返回,不再等待。4、信号驱动IO模型在进程开始的时候注册一个信号处理的回调函数,进程继续执行,当

2021-02-18 15:36:25 510

原创 IO函数

一、IO函数1.recv()#include <sys/types.h>#include <sys/socket.h>ssize_t recv(int fd,void* buf ,size_t len,int flags);fd,调用socket()返回的套接字文件描述符buf,指向接收网络数据的缓冲区len,接收缓冲区的长度,单位字节flag,表示接收数据的方式,常用MSG_DONTWAIT,表示非阻塞操作,不用等待,即使没有数据也立刻返回。值如下:注:当指

2021-02-10 11:13:44 602

原创 字节序

大端字节序和小端字节序小端字节序:低字节存放在低地址,高字节存放在高地址。小端字节序:低字节存放在高地址,高字节存放在低地址。例:检查字节序的例子可以使用联合体来判断系统使用的是什么字节序#include <stdio.h>#include <stdlib.h>union test{ unsigned short val; unsigned char byte[2];};int main(){ test typeorder;

2021-02-08 17:31:19 88

原创 TCP网络编程

一、套接字编程基础套接字地址结构套接字编程需要指定套接字地址作为参数,不同协议族有不同的地址结构定义方式。通常以sockaddr开头,每个协议族有一个唯一的后缀。通用套接字数据结构typedef unsigned short sa_family_t;struct sockaddr{ sa_family_t sa_family; //协议族 char sa_data[14];//协议族数据};实际使用的套接字数据结构在网络程序设计中使用的函数几乎所有的套接字函数都使用这个结构

2021-02-08 16:21:00 819

转载 TCP三次握手和四次挥手以及11种状态

转自https://blog.51cto.com/jinlong/2065461TCP三次握手和四次挥手以及11种状态1、三次握手置位概念:根据TCP的包头字段,存在3个重要的标识ACK、SYN、FINACK:表示验证字段SYN:位数置1,表示建立TCP连接FIN:位数置1,表示断开TCP连接三次握手过程说明:1、由客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随

2021-02-05 15:50:03 273

原创 线程间的互斥和信号量

线程间的互斥互斥锁是用来保护一段临界区的,它保证某段时间内只有一个线程在执行一段代码或者访问某个资源。函数 #include <pthread.h> pthread_mutex_t fastmutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t recmutex = PTHREAD_RECURSIVE_MUTEX_INITIALZER_NP; pthread_mutex_t errchkmutex = PTHREAD_ER

2021-02-04 16:19:31 232

原创 linux下的线程

线程与进程相比的有点:系统资源消耗低速度快线程间数据共享比进程间容易#include <pthread.h>#include <unistd.h>int pthread_create(pthread_t *thread,pthread_attr_t * attr,void* (*start_routine)(void*),void* arg);//创建线程int pthread_join(pthread_t thread,void** threadReturn);/

2021-02-04 16:00:43 68

原创 进程间通信和同步

linux下进程间的通信方法:半双工管道、FIFO(命名管道)、消息队列、信号量、共享内存等。1.半双工管道进程创建管道,每次创建两个文件描述符来操作管道。其中一个对管道进行写操作,另一个描述符进行读操作。创建管道的原型为:#include<unistd.h>int pipe(int filedes[2]);filedes数组是一个文件描述符的数组,用于保存管道返回的两个文件描述符。filedes[0]是为了读操作而创建和打开的,filedes[1]是为了写操作而打开的。函数执行

2021-02-04 15:31:32 347

转载 C++ 类的static静态成员

转自:https://www.cnblogs.com/wkfvawl/p/10834549.html静态static静态成员的提出是为了解决数据共享的问题。实现共享有许多方法,如:设置全局性的变量或对象是一种方法。但是,全局变量或对象是有局限性的。在全局变量前,加上关键字static该变量就被定义成为了一个静态全局变量。 该变量只有在本源文件中可见,严格讲应该为定义之处开始到本文件结束,静态全局变量不能被其他文件所用。通常,在函数体内定义一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。

2021-02-03 17:00:56 463

原创 linux升级gcc5.4.0与glibc2.17

GCC 5.4.0升级把压缩文件 gcc-5.4.0.tar.bz2 放入/usr/local目录下,并解压cd /usr/localtar -xvf gcc-5.4.0.tar.bz2进入gcc-5.4.0目录,并上传以下四个文件到gcc-5.4.0目录下cd gcc-5.4.0/修改配置文件 并执行vi ./contrib/download_prerequisites直接跳到...

2020-02-28 18:06:06 1089

软件设计师04-20真题及答案.zip

软考中级-软件设计师

2021-09-02

2018武汉大学933计算机基础模拟

2018武汉大学933计算机基础模拟

2018-12-09

武汉大学版多媒体技术复习资料

新一代多媒体技术与应用 武汉大学出版社 考试要点 总结

2018-01-15

信息隐藏技术与应用武汉大学出版社 课后答案

信息隐藏技术与应用课后答案 自己整理的 大部分都有 开卷考试用

2018-01-11

实验六:数字水印

1.实现W-SVD、DCT域混沌细胞自动机水印,实现细胞自动机水印的检测。2. 使用stirmark攻击嵌入细胞自动机水印的图片,对攻击后的图片进行水印的检测。

2017-12-06

LSB与MSB信息隐藏实验

嵌入:1 顺序选取图像载体像素的最低有效位,排列起来作为秘密信息载体2 将秘密信息按位替换到载体中3 将载体重新写入图片.提取:1 顺序选取图像载体像素的最低有效位,排列起来作为秘密信息载体2 提取载体的前n位,n为秘密信息长度 实验1.3设计随机取点的算法 随机选取像素点嵌入秘密信息 提取秘密信息 画出随机位置

2017-12-06

二值图像的信息隐藏实验

1.用MATLAB函数实现二值图像信息隐藏2.用MATLAB函数实现二值图像隐藏信息的提取3. 分析阈值R0,R1 以及健壮参数λ对实验结果的影响

2017-11-22

图像DCT域信息隐藏实验

信息隐藏技术实验,MATLAB代码,1、 编写两个函数,分别用来处理三点法的嵌入和提取操作。(适应任意载体图像。)2、分析隐蔽载体在JPEG压缩条件下的健壮参数a与隐藏鲁棒性的关系 (两点法)。

2017-11-22

空空如也

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

TA关注的人

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