自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 1、typeid

cpp中获取类型名

2022-10-09 21:49:59 696

原创 lambda表达式

C++中lambda表达式

2022-09-14 15:34:40 323

原创 Qt第四天

一个理解: 什么是头文件? 引入后,可以通过创建类对象,来使用功能 例如 #include <QTimer> QTimer * timer = new 一、QT中的socket通信 Qt中提供的所有的Socket类都是非阻塞的。 Qt中常用的用于socket通信的套接字类: QTcpServer 用于TCP/IP通信, 作为服务器端套接字使用 QTcpSocket 用于TCP/IP通信,作为客户端套接字使用。 QUdpSocket 用于UDP通信,服务器,客户端均使用此套接字

2022-01-03 11:59:52 1219

原创 QT第三天

一、自定义控件 1.1 自己做一个组件步骤 在创建的好的项目里==添加一个Qt 设计师界面类== 选择Widget 起一个类名 在smallwidget.ui中加入一个widget,右键,提升为 输入类名称(注意与创建的类名一致),勾上全局包含(为了再次添加方便),然后点击添加,再点击提升 运行 1.2 代码看帮助加书写详解 在smallwidget.cpp中输入代码: 先理清楚两个类的信号和槽 左边是拖动ui里面的Spin Box ,类名叫QSpinBox 右边是拖动ui里面的Horizont

2021-12-23 20:03:15 588

原创 QT第二天

一、QMainWindow QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets 又称为浮动窗口)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等。 菜单栏最多只能有一个,工具栏可以有多个 状态栏最多只能有一个,铆接部件(浮动窗口)可以有多个 !!!可以有多个的有add,只能有一个的只有set!!! 1.1 菜单栏

2021-12-15 21:34:01 633

原创 QT第一天

一、介绍 1.1 介绍 QT是一套应用程序开发库,但与MFC不同,QT是跨平台的开发类库。 跨平台意味着只需要编写一次程序,在不同平台无需改动或只需少许改动编译,就可以形成在不同平台上运行的版本。 1.2 优点 跨平台 接口简单,容易上手 一定程度上简化了内存回收 二、注意事项 2.1名称跟创建的路径不能含中文!!! 2.2如果不编译,会显示红色 2.3 默认创建有窗口类myWidget,基类有三种选择:QWidget(类似于空窗口),QMainWindow以及QDialog三个 QWidget 是所

2021-12-01 21:28:54 672

转载 使用VScode连接远程服务器的配置方法

VScode简介 由微软推出的一款轻量级编辑器,拥有大量可拓展插件,可以根据自己的需求添加插件使编辑器的功能丰富起来。VScode和Sublime Text应该是最受欢迎的两款编辑器,本文将介绍在Windows下如何使用VScode连接远程linux服务器进行开发。 为什么用VScode 连接远程服务器的方法有很多,比如可以借助XShell、putty等软件使用ssh命令来登录远程服务器。但如果使用这种连接方法在远程服务器上进行开发工作,会来带诸多不便,比如: 全程只能在终端使用指令操作,文件操作麻烦。

2021-10-06 20:24:15 1386

原创 14.C++线程池

一、线程池原理 ​ 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样==频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。== ​ 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务呢? ​ 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小

2021-09-12 20:49:09 834 1

原创 13.补充知识、线程池浅谈、数量谈、总结

目录 一、补充一些知识点 1.1 虚假唤醒: notify_one或者notify_all唤醒wait()后,实际有些线程可能不满足唤醒的条件,就会造成虚假唤醒,可以在wait中再次进行判断解决虚假唤醒。 解决:wait中要有第二个参数(lambda),并且这个lambda中要正确判断所处理的公共数据是否存在。 1.2 atomic: (1)这里只有读取atm是原子操作,但是整个这一行代码 cout << atm << endl; 并不是原子操作,导致最终显示在屏幕上的值是一个“曾

2021-09-12 16:41:44 246

原创 12.windows临界区、其他各种mutex互斥量

目录 一、windows临界区 Windows临界区与互斥量用法非常相似;但也有些差别 在“同一个线程”(不同线程中会卡住等待)中, Windows中的“相同临界区变量”代表的临界区的进入(EnterCriticalSection)可以被多次调用,但是调用了几次EnterCriticalSection(),就得调用几次EnterCriticalSection() 而在C++11中,std::mutex不允许同一个线程中lock同一个互斥量多次,否则报异常; 多线程 互斥量与Windows临界区对比代码如下

2021-09-12 16:32:11 397

原创 11.atomic续谈、async深入谈

目录 一、原子操作std::atomic续谈 #include <iostream> #include <thread> #include <atomic> using namespace std; std::atomic<int> g_count = 0; //封装了一个类型为int的 对象(值) void mythread1() { for (int i = 0; i < 1000000; i++) { //虽然g_count使用了原子

2021-09-12 15:30:37 311

原创 10.future其他成员函数、shared_future、atomic

目录 一、std::future 的成员函数 std::future_status status = result.wait_for(std::chrono::seconds(几秒)); 卡住当前流程,等待std::async()的异步任务运行一段时间,然后返回其状态std::future_status。如果std::async()的参数是std::launch::deferred(延迟执行),则不会卡住主流程。 std::future_status是枚举类型,表示异步任务的执行状态。类型的取值有 std

2021-09-12 15:00:29 361

原创 9.async、future、packaged_task、promise

目录 一、std::async、std::future创建后台任务并返回值 1.目的 :希望线程返回一个结果; 2.头文件:#include <future> 3…用法 :1.std::future<int> result = std::async(mythread); //创建一个线程开始执行 ​ 2.std::future里面的get()等待线程结束并返回结果,wait等 待线程结束但是不返回结果 4.疑问 :为什么不用join直接代替呢

2021-09-11 21:32:51 304

原创 8.condition_variable、wait、notify_one、notify_all

目录 一、条件变量std::condition_variable、wait()、notify_one() std:: condition_variable实际上是个类,是一个与条件相关的类,说白了就是等待一个条件的达成。这个类是需要和互斥量来配合工作的,用的时候我们要生成这个类的对象。 实例代码: 线程A:等待一个条件满足 线程B: 专门往消息队列扔消息(数据) 1.1 wait() wait()用来等一个东西 如果第二个参数是true,那么wait()直接返回 如果第二个参数lambda表达式返回值

2021-09-11 12:11:39 446

原创 7.单例设计模式共享数据分析、解决、call_once

目录 一、设计模式 程序灵活,维护起来可能方便,用设计模式理念写出来的代码很晦涩,但是别人接管、阅读代码都会很痛苦 老外应付特别大的项目时,把项目的开发经验、模块划分经验,总结整理成设计模式 中国零几年设计模式刚开始火时,总喜欢拿一个设计模式往上套,导致一个小小的项目总要加几个设计模式,本末倒置 设计模式有其独特的优点,要活学活用,不要深陷其中,生搬硬套 二、单例设计模式 整个项目中,有某个或者某些特殊的类,只能创建一个属于该类的对象。 单例类:只能生成一个对象。 三、单例设计模式共享数据分析、解决

2021-09-11 12:10:31 341

原创 8.condition_variable、wait、notify_one、notify_all

目录 一、条件变量std::condition_variable、wait()、notify_one() std:: condition_variable实际上是个类,是一个与条件相关的类,说白了就是等待一个条件的达成。这个类是需要和互斥量来配合工作的,用的时候我们要生成这个类的对象。 实例代码: 线程A:等待一个条件满足 线程B: 专门往消息队列扔消息(数据) 1.1 wait() wait()用来等一个东西 如果第二个参数是true,那么wait()直接返回 如果第二个参数lambda表达式返回值

2021-09-11 12:08:58 306

原创 6.unique_lock详解

目录 一、unique_lock取代lock_guard unique_lock是个类模板,工作中,一般使用lock_guard(推荐使用!) lock_guard取代了mutex的lock()和unlock(); unique_lock比lock_guard灵活很多,效率上差一点,内存占用多一点。 二、unique_lock的第二个参数 lock_guard可以带第二个参数: std::lock_guard<std::mutex> sbguard1(my_mutex1, std::adopt

2021-09-02 19:34:22 4517

原创 C++ 中继承和组合的区别

应试回答:继承是is-a的关系,组合是has-a的关系 1.继承 继承是面向对象三大基本特征之一(继承,封装,多态),继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 直接通过例子来了解继承: /* * 动物 */ class Animal{ public: virtual void show()=0; } /** * 飞行动物 * 继承 */ class FlyingAnimals : public Anim.

2021-08-30 11:18:21 334

原创 5.C++设计模式-行为型模型

5.C++设计模式-行为型模型 用来对类或对象怎样交互和怎样分配职责进行描述。 5.1 模板方法模式 5.1.1 模板方法的理论 ​ 定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 5.1.2 模板方法的案例 #include <iostream> using namespace std; class DrinkTemplate { public: //注水 virtual void Boildwate

2021-08-29 22:17:34 1978 1

原创 1.socket网络编程

socket网络编程总结(Linux+Windows) 理解为:套接字通信,网络通信 1.概念 1.1 局域网和广域网 局域网:局域网将一定区域内的各种计算机、外部设备和数据库连接起来形成计算机通信的私有网络。 广域网:又称广域网、外网、公网。是连接不同地区局域网或城域网计算机通信的远程公共网络。 1.2 IP(Internet Protocol) 本质是一个整形数,用于表示计算机在网络中的地址。IP 协议版本有两个:IPv4 和 IPv6 1.2.1 IPv4(Internet Protocol vers

2021-08-28 17:12:31 1341

原创 4.C++设计模式-结构型模型

4.C++设计模式-结构型模型 让类和类进行组合,获得更大的结构。 4.1 代理模式 4.1.1 代理模式的理论 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 举例: 比如这里面服务器B的test可能还没写好,A访问不了,先访问代理类,写好了代替再代替访问 4.1.2 代理模式的案例 传统方法局限:是个人都能调用 #include <iostream> usin

2021-08-27 17:43:47 1929

原创 3.C++设计模式-创建型模型

3.C++设计模式-工厂模式 3.1 简单工厂模式 3.1.1 理论 3.1.2 简单工厂模式案例 不难看出,Fruit类是一个“巨大的”类,在该类的设计中存在如下几个问题: (1) 在Fruit类中包含很多“if…else…”代码块,整个类的代码相当冗长,代码越长,阅读难度、维护难度和测试难度也越大;而且大量条件语句的存在还将影响系统的性能,程序在执行过程中需要做大量的条件判断。 (2) Fruit类的职责过重,它负责初始化和显示所有的水果对象,将各种水果对象的初始化代码和显示代码集中在一个类中实现

2021-08-26 19:21:31 3747 5

原创 2.C++设计模式-面向对象原则

2.面向对象设计原则 2.1 开闭原则 开闭原则:类的改动是通过增加代码进行的,而不是修改源代码。 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; //开闭原则,对扩展开放,对修改关闭,增加功能是通过增加代码来实现,而不是去修改源代码 //写一个抽象类 class AbstractCaculator { public: virtual int getResult() = 0; virt

2021-08-26 19:15:44 2923

原创 2.C++设计模式-面向对象原则

2.面向对象设计原则 2.1 开闭原则 开闭原则:类的改动是通过增加代码进行的,而不是修改源代码。 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; //开闭原则,对扩展开放,对修改关闭,增加功能是通过增加代码来实现,而不是去修改源代码 //写一个抽象类 class AbstractCaculator { public: virtual int getResult() = 0; virt

2021-08-25 17:27:42 253

原创 指针与数组详解(笔试易混题)

#include <bits/stdc++.h> using namespace std; int main() { const char* str1 = "abcde"; char str2[] = "abcde"; char str3[8] = { 'a' }; char str4[] = "123456789"; cout << "sizeof(str1):" << sizeof(str1) << endl; cout <<

2021-08-22 10:17:10 244

原创 5.互斥量概念、用法、死锁演示及解决详解

目录 一、互斥量(mutex)的基本概念 1)保护共享数据,操作时,用代码把共享数据锁住,其他想操作共享数据的线程必须等待解锁。其他想操作共享数据的线程必须等待解锁,锁定,操作,解锁。引入互斥量(mutex)。 2)mutex就是一个类对象。理解成一把锁,多个线程尝试用lock()成员函数来加锁这把锁头,只有一个线程能锁成功(成功的标志是loc()函数返回),如果没有锁成功,那么流程就会卡在lock()这里不断的尝试去锁这把锁头。 3)互斥量使用要小心,保护数据不多也不少,少了达不到效果,多了影响效率。

2021-08-21 14:41:58 837

原创 C++中sleep区分

1.C++ 11 #include <iostream> #include <thread> #include <chrono> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { for (int i = 0; i < 100; i++){ cout << i << " "; this_thread::sleep_for(chrono::seconds(5));

2021-08-21 14:23:28 348

原创 4.创建多个线程、数据共享问题分析、案例分析

目录 一、创建和等待多个线程 #include <iostream> #include <string> #include <thread> #include<vector> using namespace std; void myprint(int inums) { cout << "myprint线程开始执行了" << inums<<endl; //干各种事情 cout << "myprint线程结

2021-08-21 10:31:10 302

原创 3.线程传参详解,detach()大坑,成员函数做线程函数

目录 一、传递临时对象作为线程参数 1.1 要避免的陷阱(解释1) 案例①: #include<iostream> #include<thread> using namespace std; void myprint(const int &i,char *pmybuf) { //1.分析认为,i并不是mvar的引用,实际是值传递,那么我们认为,即便主线程detach了子线程,那么子线程中用的i值是安全的。 //2.推荐使用const int i传入

2021-08-19 21:02:28 367

原创 2.线程启动、结束、创建线程多发、join,detach

目录: 一、范例演示线程运行的开始和结束 1)程序运行起来,生成一个进程,该进程所属的主线程开始自动运行 2)主线程从main()开始执行,那么我们自己创建的线程,也需要从一个函数开始运行(初始函数),一旦这个函数运行完毕,就代表着我们这个线程运行完毕 3)整个进程是否完毕的标志是 主线程是否执行完,如果主线程执行完毕了,就代表整个进程执行完毕了。此时,如果其他子线程还没有执行完毕,那么这些子线程也会被操作系统强行终止。 ​ 所以,一般情况下,我们将得到一个结论,如果大家想保持线程(自己用代码创建的)运行

2021-08-17 17:31:02 452

原创 1.并发基本概念及实现,进程、线程基本概念

目录: 一、并发、进程、线程的基本概述和综述 重点:并发、线程、进程要求必须掌握 1.1 并发 1)两个或者更多的任务(独立的活动)同时发生(进行):一个程序同时执行多个独立的任务; 2)以往计算机,单核cpu(中央处理器):某一个时刻只能执行一个任务,由操作系统调度,每秒钟进行多次所谓的“任务切换”。并发的假象(不是真正的并发),切换(上下文切换)时要保存变量的状态、执行进度等,存在时间开销; 3)随着硬件发展,出现了多处理器计算机:用于服务器和高性能计算领域。 台式机:在一块芯片上有多核(一个CPU内

2021-08-17 15:01:13 1060

转载 详细介绍Python进度条tqdm的使用

详细介绍Python进度条tqdm的使用_python_脚本之家 (jb51.net) 前言 有时候在使用Python处理比较耗时操作的时候,为了便于观察处理进度,这时候就需要通过进度条将处理情况进行可视化展示,以便我们能够及时了解情况。这对于第三方库非常丰富的Python来说,想要实现这一功能并不是什么难事。 tqdm就能非常完美的支持和解决这些问题,可以实时输出处理进度而且占用的CPU资源非常少,支持windows、Linux、mac等系统,支持循环处理、多进程、递归处理、还可以结合linu.

2021-07-22 15:51:11 1601

原创 xshell不能连接虚拟机问题/主机ping不通虚拟机问题

在vm虚拟机网络编辑器中查看,你的vm 与主机是否在同一个网段 比如:主机ip196.1.1.2 虚拟机ip网段得改成196.1.1.128-196.1.1.254

2021-07-21 08:45:46 297

原创 C++中将char变为string型

以力扣1002 查找常用字符为例子: 1.法一 使用substr class Solution { public: string panduan(string& s1,string& s2){ string res= ""; int arr1[26] = {0}; int arr2[26] = {0}; for(int i = 0;i<s1.size();i++){ ar

2021-07-15 10:34:09 911

原创 C++链表几个问题

创建链表 //利用链表创建三个学生的信息,学生信息包括姓名和年龄,输出名为kaka学生的年龄 #include<iostream> using namespace std; //第一步,创建结构体 struct student { char name[20]; int age; student *next; //第二步,在节点数据中添加一个指针节点数据类型的指针next }; int main() { // 链表创建 student c = { "Terry",30,NU.

2021-07-04 15:54:01 135

转载 2021-06-29

方法一: vector<int> list1; 默认初始化,vector 为空, size 为0。容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间。这种初始化方式适用于元素个数未知,需要在程序中动态添加的情况。 方法二: vector<int> list2(list); vector<int> list2 = list; 两种方式等价 ,list2 初始化为 list 的拷贝。list 必须与 list2 类

2021-06-29 21:13:20 122

原创 C++ 中 vector定义二维数组的输入和输出

#include <iostream> using namespace std; #include <vector> int main() { int r = 0, c = 0; cout << "输出行数 r: ";//规定二维数组行数 cin >> r; cout << "输入列数 c: ";//规定二维数组列数 cin >> c; vector<vector<int>> array;//定义二

2021-06-29 19:24:30 9168 2

原创 Python cv2.imread读取图像但是返回None

#例如: img=cv2.imread(r'E:/图片一.png') print(img) >> None 返回None的原因是cv2.imread后跟着的必须是英文路径 #改法1: img=cv2.imread(r'E:/1.png') print(img) #改法2: img=cv2.imdecode(np.fromfile(r'E:/图片一.png',dtype=np.uint8),-1) print(img) ...

2021-05-23 11:04:57 5310

原创 写%matplotlib inline 的原因

%matplotlib inline #IPython notebook中的魔法方法,这样每次运行后可以直接得到图像,不再需要使用plt.show()

2021-05-17 10:25:37 131

原创 tensor备忘

其余的可见:https://blog.csdn.net/yu_1628060739/article/details/102720385?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edef...

2021-05-08 13:43:32 86

box_utils.py

box_utils.py

2023-03-09

proteus课题设计

proteus课题设计proteus课题设计proteus课题设计proteus课题设计proteus课题设计

2018-07-07

空空如也

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

TA关注的人

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