
C++
青海蓝田
这个作者很懒,什么都没留下…
展开
-
TableWidget
代码】TableWidget。原创 2022-07-25 22:44:20 · 465 阅读 · 0 评论 -
QTableWidget控件的使用
QTableWidget控件的使用原创 2022-06-18 12:54:13 · 387 阅读 · 0 评论 -
Qt菜单栏、工具栏、状态栏、铆接部件、核心部件
Qt菜单栏、工具栏、状态栏、铆接部件、核心部件原创 2022-06-14 23:24:21 · 515 阅读 · 0 评论 -
进程间的通信--无名管道
无名管道是 UNIX 系统 IPC(进程间通信)的最古老形式,所有 UNIX 系统都支持这种通信方式机制管道的特点:半双工,数据在同一时刻只能在一个方向上流懂 数据只能从管道的一段写入,另一端读出 写入管道中的数据遵循先进先出的规则 管道所传送的数据是无格式的,要求管道的读出方与写入方必须事先约定好数据的格式,如多少字节算一个消息等。 管道不是普通的文件,不属于某个文件系统,其只存在于内存中。 管道在内存中对应一个缓冲区。不同的系统其大小不一定相同。 从管道读数据是一次性操作,数据..原创 2022-04-24 20:44:34 · 778 阅读 · 0 评论 -
线程死锁的代码示例
#include <cstddef>#include <cstdio>#include<iostream>#include<pthread.h>#include <unistd.h>using namespace std;/* 死锁:两个线程视图同时占用两个资源,并按不同的次序锁定相应的共享资源 解决方法: 按相同的次序锁定相应的共享资源 使用 pthread_.原创 2022-04-11 23:30:22 · 868 阅读 · 0 评论 -
信号量实现线程的同步
#include <cstdio>#include<pthread.h>#include<iostream>#include <semaphore.h>#include <unistd.h>using namespace std;/* 一个线程负责计算结果,一个线程负责获取结果*/struct Result{ int res; //定义信号量 sem_t sem;};//计算并将结果放置Re.原创 2022-04-11 23:21:43 · 274 阅读 · 0 评论 -
线程信号量
信号量本质上是一个非负整数计数器,是共享资源的数目,通常用来控制对共享资源的访问线程信号量可以实现线程间的同步与互斥通过sem_post()和sem_wait()函数对信号量进行加减操作,从而解决线程的同步和互斥信号量的数据类型: sem_t信号量的创建和销毁#include<semaphore.h>int sem_init(sem_t *sem,int pshare,usigned value);int sem_destroy(sem_t *s...原创 2022-04-10 21:34:15 · 641 阅读 · 0 评论 -
读者写者问题(一个读者一个写者)
#include <cstddef>#include <cstdio>#include<iostream>#include<pthread.h>#include <unistd.h>using namespace std;struct Storage{ //两个条件变量、两个互斥锁 int value; pthread_cond_t rc; pthread_mutex_t rm; int .原创 2022-04-08 22:48:42 · 324 阅读 · 0 评论 -
条件变量的简单使用
条件变量的创建和销毁#include<pthread.h>int pthread_cond_init(pthread_cond_t *cond,pthread_condattr_t *cond_attr);int pthread_cond_destroy(pthread_cond_t *cond);返回值:成功返回0,出错返回错误编号参数: cond:条件变量 attr:条件变量属性条件变量的等待操作#include&l...原创 2022-04-07 23:27:18 · 185 阅读 · 0 评论 -
互斥锁、读写锁、信号量(实现互斥)的简单应用,程序示例
mutex1.h#ifndef __ACOUNT_H__#define __ACOUNT_H__#include <pthread.h>struct Account{ int code; double balance; //账户余额 //定义一把互斥锁,用来对多线程操作的 //银行账户(共享资源)进行加锁保护的 //建议互斥锁用来锁定一个账户(共享资源),和账户绑定在一起 //尽量不设置为全局变量,否则可能出现一把锁去锁定原创 2022-04-06 20:00:39 · 675 阅读 · 0 评论 -
读写锁互斥问题
读写锁的创建和销毁#include<pthread.h>int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock,const pthread_rwlockattr_t *restrict attr);int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);返回值:成功返回0,否则返回...原创 2022-04-06 19:32:40 · 311 阅读 · 0 评论 -
互斥锁的类型( 标准互斥锁(默认互斥锁)、递归互斥锁、 检错互斥锁)
互斥锁属性创建和销毁#include<pthread.h>int pthread_mutexattr_init(pthread_mutexattr_t *attr);int pthread_mutex_attr_destroy(pthread_mutexattr_t *attr);返回值:成功返回0,出错返回错误编号参数:互斥锁属性互斥锁共享属性操作#include<pthread.h>int pthread_mutexattr_getpsh..原创 2022-04-06 15:37:36 · 547 阅读 · 0 评论 -
快速排序基础分析
快速排序的基本思想:首先在数组中选取一个用于比较的基准值,将待排序的记录分为两部分,左侧记录均是小于或等于基准值的,右侧记录均是大于或等于基准值的,然后分别对两部分重复上述操作。基准值:1.选取第一个元素2.选取第一个元素、最后一个元素、中间元素中居中的元素作为基准值,并调到第一个元素 的位置时间复杂度:快速排序的执行时间取决于递归的深度:最坏情况:O(n^2) 元素正序或逆序,所有除...原创 2022-03-16 00:00:46 · 165 阅读 · 0 评论 -
function函数对象包装器和bind机制
支持四种函数的包装: 普通函数 匿名函数 类的成员函数 仿函数(重载了()运算符的函数) //函数对象包装器#include<iostream>#include<vector>#include<algorithm>#include<functional>using namespace std;//函数对象包装器,为函数提供了一种容器(封装)int test(int n){ cout <.原创 2021-12-11 12:37:26 · 395 阅读 · 0 评论 -
匿名函数的捕获列表的【捕获类型】
按值捕获//按值捕获#include<iostream>using namespace std;int main(){ int t = 10; /*[t]() { cout << t << endl; }(); //直接调用形式(有参数直接加参数就行) */ //按值捕获,捕获的是声明匿名函数时,捕获列表参数的值 auto f = [t]() { cout << t << endl; //输出.原创 2021-12-07 14:25:57 · 469 阅读 · 0 评论 -
匿名函数中mutable的使用
#include<iostream>using namespace std;int main(){ int t = 10; auto f = [t]() mutable //[t] 为捕获t(是值捕获),拷贝额一份t { return ++t; }; auto f2 = [t]() mutable { return ++t; }; //查看内存变化就能发现 //(多次调用同一个匿名函数,内部维持自己的一份变量,不影响外面的,也不影响其他.原创 2021-12-07 10:46:25 · 346 阅读 · 1 评论 -
重载 << 运算符和 > 运算符
重载 << 运算符, > 运算符,<运算符的函数书写原创 2021-11-30 23:12:17 · 302 阅读 · 0 评论 -
构造string的方法,及substr操作
const char*c="hello world"string s(c,n) //s 是 c 指向的数组中前 n 个字符的拷贝,该数组至少应该包含 n 个字符。 string s(s1,pos1) //s 是 string s1 从下标 pos 开始的字符串的拷贝,如果 pos>s1.size(),则会抛出 out_of_range 的异常,刚好的等于就是拷贝为空 。 string s(s2,pos2,len) //s 是 string s2 从下标 pos2 开始...原创 2021-11-21 21:12:48 · 460 阅读 · 0 评论 -
resize 改变容器大小
resize 可以用来增大或缩小容器的大小,如果当前容器大小大于所要求的大小(所要求的大小:reszie 的大小),容器后面的元素会被删除,如果当前容器大小小于新的大小,会将新元素添加到容器后面。 vector<int> vec(10, 100); //10个100 vec.resize(15); //后面的5个为0 /*for (int i : vec) { cout << i << " "; }*/ cou...原创 2021-11-21 16:24:38 · 1679 阅读 · 0 评论 -
重载运算符返回类对象时的函数调用情况
例如在重载的 * 运算符函数中,在返回类对象时,均创建一个临时对象作为返回值:1. return A(n * rhs.n, d * rhs.d);先创建再返回:2. A result(n * rhs.n, d * rhs.d); return result;返回的 *this 也是临时对象的地址:3 return *this; //第一段程序的截取const A operator*(const A& rhs) { ...原创 2021-11-20 21:52:56 · 344 阅读 · 0 评论 -
有关拷贝构造函数和赋值运算符
拷贝构造函数也是一种构造函数,在用一个已存在的对象去初始刚创建的对象时调用拷贝构造函数。默认的拷贝构造函数(缺省的)是浅拷贝,完全地把对象A拷贝给对象B,如果当数据成员中有指针了型的数据成员时,采用(执行)默认的的拷贝构造函数时,会发生内存泄漏。指针类型的数据成员会执行同一块内存空间,当程序结束时,调用两次析构函数,此时的内存会被释放两次(本身只有一块内存,两个指针都指向这块内存空间)(下面代码没有涉及到深拷贝的情况)#include<iostrea...原创 2021-11-11 19:46:53 · 285 阅读 · 0 评论 -
五子棋【基于 EasyX 图像库】
首先要安装 EasyX然后就是代码了(基本都有注释)//头文件 five_chess.h//也可以不用这个类了,全部放在 main.cpp 上也行,为了保持习惯,就分一下吧//当然每个函数的实现也可以放在不同的 cpp 文件上class five_chess{public: void initGame(); void playChess(); int judge_winlos(int a,int b);};//main.cpp#include<iostream原创 2021-10-27 00:26:34 · 576 阅读 · 0 评论 -
lc 492. 构造矩形
//双指针class Solution {public: vector<int> constructRectangle(int area) { vector<int> vec(2); int sub_val = area; int L = area, W = 1; while (W<=L) { if (W * L == area && L - W <= sub_val) //L-W=chaz.原创 2021-10-23 17:02:08 · 96 阅读 · 0 评论 -
lc 187. 重复的DNA序列
class Solution{ public: vector<string> findRepeatedDnaSequences(string s) { vector<string> vec; if (s.size() <= 10) { return vec; } map<string, int> ma; //没要求有序的,也可以..原创 2021-10-09 17:36:45 · 94 阅读 · 0 评论 -
io 多路复用之 poll
客户端#include<unistd.h>#include<arpa/inet.h>#include<iostream>#include<string.h>using namespace std;int main(){ //创建socket int fd = socket(AF_INET, SOCK_STREAM, 0); if (fd == -1) { perror("socket error"); exit(-1);原创 2021-09-27 20:59:03 · 124 阅读 · 0 评论 -
io 多路复用之 select
目录客户端服务器客户端#include<iostream>#include<unistd.h>#include<arpa/inet.h>#include<string.h>using namespace std;int main(){ //创建socket int fd = socket(AF_INET, SOCK_STREAM, 0); if (fd == -1) { perror("socket erro..原创 2021-09-26 23:38:31 · 100 阅读 · 0 评论 -
【C++】杨辉三角
杨辉三角简介(来自百度百科):杨辉三角,是二项式系数在三角形中的一种几何排列。在欧洲,这个表叫做帕斯卡三角形。帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年。杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。(百度百科)性质: 每个数等于它上方两数之和。 每行数字左右对称,由1开始逐渐变大。 第n...原创 2021-08-19 13:18:21 · 2433 阅读 · 0 评论 -
erase 函数使迭代器失效
顺序容器的删除操作:这些操作会改变容器的大小,所以不适用于 array顺序容器的类型: vector 可变大小的数组。支持快速随机访问,在尾部之外的位置插入或删除元素可能很慢。 deque 双端队列。支持快速随机访问,在头尾位置插入或删除的速度很快。 list 双向链表。只支持双向顺序访问。在 list 中任何位置进行插入或删除操作的速度都很快。 ...原创 2021-08-17 22:42:08 · 832 阅读 · 0 评论 -
switch 内部变量的定义问题
在 C++primer 中学习,也是来自此书的内容摘抄与总结:switch 的执行流程可能会跨过某些 case 标签,跳转到特定位置的 case 标签,那么,这个 case 标签到 switch 之间的 case 标签就被忽略掉了,在这被忽略的代码中有变量的定义怎么办? 如果在某处一个带有初值的变量位于作用域之外,在另一处该变量位于作用域之内,则从前一处跳到后一处的行为是违法行为。#include<iostream>#inclu...原创 2021-08-12 22:24:39 · 975 阅读 · 0 评论 -
【C++】NULL 和 nullptr 的区别:
C++中,NULL可以表示0,也可以表示空指针,nullptr只表示空指针。初始化指针时用NULL 或 0 都是正确的,int * p=0 (是正确的),用NULL代替0表示空指针在函数重载时会出现问题,代码举例如下:当有重载函数时:#include<iostream>using namespace std;void func1(void* a){ cout << "func1(void*)" << endl;}void func...原创 2021-08-12 11:12:18 · 272 阅读 · 0 评论 -
mutable 关键字
const 关键字 用于类的成员函数,成为常成员函数,即:不允许在常成员函数的内部 (实现里) 修改数据成员的值。 mutable 关键字 用于类的成员函数,即:允许在常成员函数的内部 (实现里) 修改数据成员的值。mutable 的中文意思是 可变的、易变的,const (常量、常数)的意思,他们俩也就是反义词。 mutable 也就是为了突破const的,被mutable 修饰的变量,是处于可变的状态,在类中的常成员函数中,是不能修改数据成员的(在成员函数中,如果函数实现里...原创 2021-07-14 18:14:50 · 2055 阅读 · 0 评论 -
【C++】含有可变形参的函数和省略符形参(附代码)
含有可变形参的函数:有时我们无法预知应该向函数传递几个实参,例如我们想要编写代码输出程序产生的错误信息,此时最好使用同一个函数实现该项功能。C++11新标准,如果所有的实参类型相同,可以传递一个名为initializer_list的标准库类型。initializer_list是一种标准库类型,用于表示某种特定类型的值的数组,initializer_list类型定义在同名的头文件中#include<initializer_list>#include<iostream>#原创 2021-05-28 11:03:07 · 603 阅读 · 0 评论 -
【C++】多态的方式与其示例
实现多态的方式:1.静态多态 ,静态多态的,基于函数重载和模板2.动态多态,用虚函数实现(在具有继承体系的类中(至少基类和派生类,即一层派生))虚函数实现的动态多态:使用基类的指针或引用来指向派生对象#include<iostream>using namespace std;class Base{public: Base() = default; virtual void Base_display(){} virtual void print() { cou原创 2021-05-11 22:15:42 · 387 阅读 · 0 评论 -
调用函数时的三种参数传递方式(传值、传引用、传地址)
1.传值方式:exchange函数的形参的值是实参的拷贝。#include<iostream>using namespace std;void exchange(int a, int b){ int z; z = a; a = b; b = z; cout << "a的值为:" << a << "b的值为:" << b << endl;}int main(){ int a = 5; in...原创 2021-05-10 00:21:59 · 9935 阅读 · 1 评论