
C++
文章平均质量分 65
我要出去玩儿
这个作者很懒,什么都没留下…
展开
-
Qt 使用 QFrame 实现 QScrollArea
Qt 使用 QFrame 实现 QScrollArea 效果原创 2022-08-02 10:36:46 · 395 阅读 · 0 评论 -
Qt QComboBox 隐藏选项
最近用到了 QComboBox 组件,开发时觉得设计的可选项还是比较 OK 的,但是最终有几个选项被认为没什么用,效果也不好,建议屏蔽掉。我自己觉得这几项以后肯定用的着,直接删除太残忍了,且万一以后用到了呢。本着这样的心思我简单的屏蔽掉了这些选项,但是因为对 QComboBox 不熟悉忽略了滚轮事件的处理,导致鼠标焦点在该组件上时如果滚动滚轮依然可以看到被屏蔽的选项,后来使用下面的方法完成了最终的屏蔽效果:QStringList strategyText;strategyText << Q原创 2021-12-30 19:41:58 · 3085 阅读 · 0 评论 -
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 · 187 阅读 · 0 评论 -
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 · 475 阅读 · 0 评论 -
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 · 560 阅读 · 0 评论 -
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 · 623 阅读 · 0 评论 -
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 · 254 阅读 · 0 评论 -
C++11 线程
01 threadthread 用于创建线程对象。thread 对象使用可调用对象进行初始化。可调用对象是线程的入口函数,初始化之后线程立即执行。thread 初始化成功后拥有唯一的线程 ID默认构造的(未初始化的)线程对象是不可连接(t.joinable() == false)的。成员函数(constructor) (destructor) operator= // 移动 thread 对象g原创 2021-10-05 09:13:15 · 445 阅读 · 0 评论 -
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 · 146 阅读 · 0 评论 -
杂项:想到了就写一下
在对 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 · 259 阅读 · 0 评论 -
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 · 274 阅读 · 0 评论 -
C++11 左值和右值
01 左值和右值概念左值右值01 引用的新规则引用折叠规则如果间接的创建一个引用的引用,将会造成这些引用的折叠:所有的右值引用折叠到右值引用上仍然是一个右值引用:T && && => T &&所有的其他类型的引用的引用都将变成左值引用:T & & => T &T & && => T &T && & => T &原创 2021-06-07 11:29:16 · 271 阅读 · 0 评论 -
常见的几种设计模式
01 设计模式六大原则开闭原则对扩展开放,对修改关闭。程序在修改时,不能修改原有的代码,而是要扩展原有的代码,实现热插拔的效果。单一职责原则一个类应该有且仅有一个引起它变化的原因,否则这个类应该被拆分。里氏替换原则(Liskov Substitution Principle)子类可以扩展父类的功能,但不能改变父类原有的功能。即子类继承父类时,除添加新的方法完成新增功能外,金陵不要重写父类的方法。依赖倒转原则(Dependence Inversion Principle)面向接原创 2021-04-26 22:41:05 · 117 阅读 · 0 评论 -
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 · 92 阅读 · 0 评论 -
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 · 82 阅读 · 0 评论 -
PAT B1018 锤子剪刀布
题目描述大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。输入格式输入第 1 行给出正整数 N(≤105),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。输出格式输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字间以 1原创 2021-03-10 11:46:40 · 95 阅读 · 0 评论 -
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 阅读 · 0 评论 -
PAT B1046 划拳
题目描述划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。下面给出甲、乙两人的划拳记录,请你统计他们最后分别喝了多少杯酒。输入格式输入第一行先给出一个正整数 N(≤100),随后 N 行,每行给出一轮划拳的记录,格式为: 甲喊 甲划 乙喊 乙划其中喊是喊出的数字,划是划出的数字,均为不超过 100 的正整数(两只原创 2021-03-10 09:46:50 · 136 阅读 · 0 评论 -
PAT B1026 程序运行时间
题目描述要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间。这个时间单位是 clock tick,即“时钟打点”。同时还有一个常数 CLK_TCK,给出了机器时钟每秒所走的时钟打点数。于是为了获得一个函数 f 的运行时间,我们只要在调用 f 之前先调用 clock(),获得一个时钟打点数 C1;在 f 执行完成后再调用 clock(),获得另一个时钟打点数 C2;两次获得的时钟打点数之差原创 2021-03-10 09:37:04 · 60 阅读 · 0 评论 -
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 · 85 阅读 · 0 评论 -
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 阅读 · 0 评论 -
PAT B1001 害死人不偿命的(3n+1)猜想
题目描述卡拉兹(Callatz)猜想:对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 (3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过 1000 的正整数原创 2021-03-10 08:42:19 · 133 阅读 · 0 评论 -
配置 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 · 866 阅读 · 0 评论 -
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 · 306 阅读 · 0 评论 -
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 · 368 阅读 · 0 评论 -
C++编程语言中有关复制构造函数的讨论
C++编程语言中有关复制构造函数的讨论摘要:C++是一个在软件行业广泛使用的面向对象的程序设计语言。本文目的是讨论C++中的特殊构造函数:复制构造函数的概念和应用。作为基础知识,我们首先介绍构造函数和析构函数。为了说明复制构造函数的概念及其使用方法,我们给出了一些有关复制构造函数的例子,并提供了浅拷贝和深拷贝。通过分析复制构造函数的所有例子,讨论了复制构造函数,得出了如何定义一个复制构造函数以及如...原创 2018-05-16 15:23:35 · 425 阅读 · 0 评论