- 博客(41)
- 收藏
- 关注
原创 CSS 渐变
线性渐变只能在一个方向上渐变,要想实现这种渐变,可以使用两个标签进行叠加:一个负责水平方向的颜色渐变,另一个通过设置透明度来实现等效的垂直方向上的颜色渐变。
2023-06-19 20:37:05
476
原创 Qt QComboBox 隐藏选项
最近用到了 QComboBox 组件,开发时觉得设计的可选项还是比较 OK 的,但是最终有几个选项被认为没什么用,效果也不好,建议屏蔽掉。我自己觉得这几项以后肯定用的着,直接删除太残忍了,且万一以后用到了呢。本着这样的心思我简单的屏蔽掉了这些选项,但是因为对 QComboBox 不熟悉忽略了滚轮事件的处理,导致鼠标焦点在该组件上时如果滚动滚轮依然可以看到被屏蔽的选项,后来使用下面的方法完成了最终的屏蔽效果:QStringList strategyText;strategyText << Q
2021-12-30 19:41:58
3050
原创 C++11 多线程并发编程
目录C++11 线程C++11 互斥量C++11 条件变量C++11 call_once/call_once_flagC++11 异步说明以上的内容是之前写的笔记,其布局和层级可能不是很合理,后期再继续修改。部分代码中去除了 int main() { 和 main 函数的结束标识 } 等,当时只是为了做笔记方便,后期会陆续补全。由于本人水平有限,部分代码可能存在错误,如有发现请留言说明,十分感谢。...
2021-10-05 09:33:06
183
原创 C++11 异步操作
C++11 头文件 中包含了如下的类和函数:类Providerspromisepackaged_taskFuturesfutureshared_future函数async其它future_error [class]future_errc [enum class]future_status [enum class]launch [enum class]std::promisepromise 用于实现实现线程同步。promise 对象可以存储
2021-10-05 09:23:28
472
原创 C++11 call_once/once_flag 使用
为了保证在多线程环境中某个函数仅会被调用一次,可以使用 std::call_once 保证函数只能被调用一次。使用 std::call_once 时需要一个 std::once_flag 做为 call_once 的入参。std::once_flag onceFlag;void doOnce(){ std::call_once(onceFlag, []() { std::cout << "Called one time" << std::endl;
2021-10-05 09:22:07
555
原创 C++11 条件变量
条件变量是另外一种用于等待的同步机制,它能阻塞一个或多个线程,直到收到另一个线程发出的通知或者超时才会唤醒当前阻塞的线程。条件变量需要和互斥量配合使用。C++11 头文件 <condition_variable > 中包含了与条件变量想关的类和函数:类std::condition_variablestd::condition_variable_any枚举cv_status函数notify_all_at_thread_exitcondition_varia
2021-10-05 09:20:58
619
原创 C++11 互斥量
01 简介互斥量是一种同步原语,是一种线程同步的手段,用于保护多线程同时访问的共享数据。C++11 头文件 <mutex> 包含:Mutex 类系列std::mutex 独占的互斥量,不能递归使用。std::timed_mutex 带超时的独占互斥量,不能递归使用。std::recursive_mutex 递归互斥量。std::recursive_timed_mutex 带超时的递归互斥里昂。Lock 类std::lock_guard 与 Mutex RAII 相关,
2021-10-05 09:18:11
251
原创 C++11 线程
01 threadthread 用于创建线程对象。thread 对象使用可调用对象进行初始化。可调用对象是线程的入口函数,初始化之后线程立即执行。thread 初始化成功后拥有唯一的线程 ID默认构造的(未初始化的)线程对象是不可连接(t.joinable() == false)的。成员函数(constructor) (destructor) operator= // 移动 thread 对象g
2021-10-05 09:13:15
444
原创 C++智能指针
01 shared_ptr 共享的智能指针shared_ptr 使用引用计数每个 shared_ptr 的拷贝都指向相同的内存,在最后一个 shared_ptr 析构时它指向的内存才会被释放。shared_ptr 在多线程中线程中的 shared_ptr 共享同一个对象的所有权,若在多个线程中访问同一个 shared_ptr 而不同步,且任意线程使用 shared_ptr 的非 const 成员函数,将会产生数据竞争,使用原子函数的 shared_ptr 特化能用于避免数据竞争(Delete in C+
2021-10-05 09:08:11
143
原创 杂项:想到了就写一下
在对 stl 容器使用普通 for 循环进行遍历,如果不需要改变容器大小,循环结束条件应该是 i < vec.size() 还是其它? 通过查询 vector::size() 源码可知:每调用一该方法就会计算一次容器的大小._NODISCARD size_type size() const noexcept { // return length of sequence auto& _My_data = _Mypair._Myval2; return static_cast&.
2021-09-25 10:52:59
254
原创 C++11 可调用对象
01 可调用对象种类// 01 函数指针void CallableObject01() {}// 02 重载 operator() 运算符的结构体/类对象struct CallableObject02{ void operator()() {}};// 03 可以被转换为函数指针的结构体/类对象struct CallableObject03{ using func_t = void(*)(); static void func() {} operat
2021-08-29 03:48:58
272
原创 C++11 左值和右值
01 左值和右值概念左值右值01 引用的新规则引用折叠规则如果间接的创建一个引用的引用,将会造成这些引用的折叠:所有的右值引用折叠到右值引用上仍然是一个右值引用:T && && => T &&所有的其他类型的引用的引用都将变成左值引用:T & & => T &T & && => T &T && & => T &
2021-06-07 11:29:16
268
原创 Git 配置 SSH
01 生成本地公钥进入 GitDash 使用下面的命令生成公钥:ssh-keygen -t rsa -C your-email // 生成本地公钥在指定的位置查看生成的公钥文件:02 进入 Git 生成 SSH 密钥进入 git 中的 setting > SSH Keys 界面添加生成的公钥。使用文本编辑器打开公钥文件 id_rsa.pub 复制其中的内容到提示区域。可自定义 ssh-key Title。之后点击生成即可:03 使用 S
2021-05-17 16:47:54
306
原创 Git 相关操作
git 相关命令回顾专用名字workspace 工作区index/stage 暂存区repository 仓库区remote 远程仓库常用命令简介新建代码仓库// 在当前目录创建一个新的 Git 代码库git init// 新建一个目录并将其初始化为 Git 代码库git init [project-name]// 下载一个项目和它的整个代码历史git clone [project-url]配置// 显示当前的 Git 配置git config --list//
2021-05-17 16:12:52
179
原创 Git 安装与配置
git 相关命令回顾专用名字workspace 工作区index/stage 暂存区repository 仓库区remote 远程仓库常用命令简介新建代码仓库// 在当前目录创建一个新的 Git 代码库git init// 新建一个目录并将其初始化为 Git 代码库git init [project-name]// 下载一个项目和它的整个代码历史git clone [project-url]配置// 显示当前的 Git 配置git config --list//
2021-05-17 15:41:50
671
原创 常见的几种设计模式
01 设计模式六大原则开闭原则对扩展开放,对修改关闭。程序在修改时,不能修改原有的代码,而是要扩展原有的代码,实现热插拔的效果。单一职责原则一个类应该有且仅有一个引起它变化的原因,否则这个类应该被拆分。里氏替换原则(Liskov Substitution Principle)子类可以扩展父类的功能,但不能改变父类原有的功能。即子类继承父类时,除添加新的方法完成新增功能外,金陵不要重写父类的方法。依赖倒转原则(Dependence Inversion Principle)面向接
2021-04-26 22:41:05
114
原创 Grid 布局
01 Grid 布局简介Grid 布局将网页划分成行和列从而形成一个个网格,可以任意组合成不同的网格。容器:采用 Grid 布局的元素,称为 Grid 容器(Grid container),简称容器。项目:采用 Grid 布局的元素的所有子元素自动成为容器成员,称为 Grid 项目(Grid item),简称项目。项目只能是容器的顶层子元素,不包含项目的子元素。单元格:行和列分割出来的区域叫做单元格(cell)。网格线:划分容器区域的线,被称为网格线(grid line)。网格线是从 1 开
2021-04-13 00:50:35
522
原创 Flex 布局
01 Flex 布局简介Flex 是 Flexible Box 的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性任何一个容器都可以指定为 Flex 布局.设为 Flex 布局以后,子元素的 float、clear 和 vertical-align 属性将失效.采用 Flex 布局的元素,称为 Flex 容器(flex container),简称容器。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称项目。项目只能是容器的顶层子元素,不包含项目的子元素。容器默认
2021-04-11 11:03:30
414
1
原创 Mac 平台相关操作
安装第三方软件安装第三方软件时 Mac 会提示:无法打开“DragonBonesPro.app”,因为无法验证开发者。解决办法就是打开控制台在控制台中输入:// 打开任何来源 sudo spctl --master-disable // 之后再次安装应用程序即可// 关闭任何来源sudo apctl --master-enbale // 之后就不能安装第三方的程序了...
2021-03-22 10:37:29
2828
原创 PAT A1046 Shortest Distance
题目描述The task is really simple: given N exits on a highway which forms a simple cycle, you are supposed to tell the shortest distance between any pair of exits.Input SpecificationEach input file contains one test case. For each case, the first line conta
2021-03-11 17:51:48
90
原创 PAT A1042 Shuffling Machine
题目描述Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techniques are seen as weak, and in order to avoid “inside jobs” where employees collaborate with gamblers by performing inadequate shuffles, many casinos e
2021-03-10 15:12:33
80
原创 PAT B1018 锤子剪刀布
题目描述大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。输入格式输入第 1 行给出正整数 N(≤105),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。输出格式输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字间以 1
2021-03-10 11:46:40
92
原创 PAT B1008 数组元素循环右移问题
题目描述一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN−M−1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?输入格式每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。输出格式在一行中输出循环右移M位以后
2021-03-10 10:04:16
97
原创 PAT B1046 划拳
题目描述划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。下面给出甲、乙两人的划拳记录,请你统计他们最后分别喝了多少杯酒。输入格式输入第一行先给出一个正整数 N(≤100),随后 N 行,每行给出一轮划拳的记录,格式为: 甲喊 甲划 乙喊 乙划其中喊是喊出的数字,划是划出的数字,均为不超过 100 的正整数(两只
2021-03-10 09:46:50
133
原创 PAT B1026 程序运行时间
题目描述要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间。这个时间单位是 clock tick,即“时钟打点”。同时还有一个常数 CLK_TCK,给出了机器时钟每秒所走的时钟打点数。于是为了获得一个函数 f 的运行时间,我们只要在调用 f 之前先调用 clock(),获得一个时钟打点数 C1;在 f 执行完成后再调用 clock(),获得另一个时钟打点数 C2;两次获得的时钟打点数之差
2021-03-10 09:37:04
57
原创 PAT B1016 部分A+B
题目描述正整数 A 的“DA(为 1 位整数)部分”定义为由 A 中所有 DA 组成的新整数 PA。例如:给定 A=3862767,DA=6,则 A 的“6 部分”PA 是 66,因为 A 中有 2 个 6。现给定 A、DA、B、DB,请编写程序计算 PA+PB。输入格式输入在一行中依次给出 A、DA、B、DB,中间以空格分隔,其中 0<A, B<1010。输出格式在一行中输出 PA+PB 的值。输
2021-03-10 08:54:02
82
原创 PAT B1011 A+B 和 C
题目描述给定区间 [−231,231] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。输入格式输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。输出格式对每组测试用例,在一行中输出 Case #X: true 如果 A+B>C,否则输出 Case #X: false,其中 X 是测试用例的编号(从 1 开始)。输入样例41 2 32 3 42147483647 0 2
2021-03-10 08:49:14
77
原创 PAT B1001 害死人不偿命的(3n+1)猜想
题目描述卡拉兹(Callatz)猜想:对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 (3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过 1000 的正整数
2021-03-10 08:42:19
131
原创 CSS BFC 总结
01 BFC 简介BFC(Block Formatting Context) 块格式化上下文BFC 是一个独立的区域,是块盒子的布局发生的的区域,也是浮动元素和其他元素交互的区域。02 父元素触发 BFC 的情况:根元素浮动元素(float 不是 none)绝对定位元素(position 为 absolute 或 fixed)display 为以下属性值的元素:行内块 inline-block,表格单元格 table-cell,表格标题 table-caption,匿名表格单元
2021-03-10 08:34:21
130
原创 requestAnimationFrame 简单应用
00 需求背景在实现一个动画的时候,一般情况下会使用setTimeout方法。但是 setTimeout方法容易出现卡顿、抖动的现象,原因是:01 setTimeout任务被放入异步队列,只有当主线程任务执行完后才会执行队列中的任务,因此实际执行时间总是比设定时间要晚;02 setTimeout的固定时间间隔不一定与屏幕刷新时间相同,会引起丢帧。01 requestAnimationFrame该方法告诉浏览器需要执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需
2021-03-10 08:27:09
260
原创 配置 OpenGL(Win10 + VS2019 + GLAD + GLFW) 并创建自己的第一个 OpenGL 项目
在画出出色的效果之前,首先要做的就是创建一个 OpenGL 上下文和一个用于显式的窗口。一些函数库已经提供了这样的功能,可以提供给开发者一个窗口和上下文来渲染。比较流行的有 GLUT, SDL, SFML, GLFW, 此处我们使用 GLFW.OpenGL 相关库OpenGL 相关库简介GLEW 是对底层 OpenGL 的接口的封装,可以让开发者的代码跨平台GLAD 与 GLEW 作用基本相同,可以看作是它的升级版本Freeglut 主要用于创建 OpenGL 上下文、接受一些鼠标键盘事件等
2021-03-09 20:13:52
865
原创 C++11 强枚举类型
枚举就是定义一个类别,并且穷举统一类别下的个体以供代码使用。C++98 枚举存在的缺陷:无论是具名枚举的名字还是枚举类型中的成员,都是全局范围的,其作用域是全局的。 如果在不同的枚举中定义了相同的枚举成员,则会出现**重复声明(redeclaration)**错误。enum PUBLIC_COLOR { RED, YELLOW, GREEN };enum PRIVATE_COLOR { RED, BLACK, PURPLE }; // RED 重定义enum PUBLIC_COLOR
2021-03-09 20:03:14
301
原创 C++11 Lambda 表达式
Lambda 表达式是重载了函数调用运算符 () 的未命名类的未命名对象。Lambda 表达式可以被认为是一个匿名的函数对象。与任何函数类似一个 Lambda 表达式包含一个返回类型、一个参数列表、一个函数体。Lambda 定义[captuer_list](parameter_list) -> return_type { function_body }captuer_list 是捕获列表,是一个 Lambda 表达式所在函数中定义的局部变量的列表return_type 是尾置返回,是一
2021-03-09 19:55:30
366
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人