自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 布隆过滤器和位图

hash

2022-01-19 22:20:20 325

原创 信号量:基于semaphore中sem值设置为1,构造一个拟互斥锁

用sem(1)初始化,构造一个互斥锁的抢票系统

2021-12-01 21:20:37 169

原创 linux生产者消费者模型

linux实现一个线程间的合作处理。对于线程c,p。。。。c是消费者,p是生产者。生产一批数据然后消费。每次得有阻塞等待线程锁被唤醒。这里的参数就不是数据了而是一个执行流代码实现如下:Task.hpp代码 1 #include <iostream> 2 using namespace std; 3 4 5 class Task 6 { 7 public: 8 Task(int x,int y,char op) 9

2021-11-29 23:13:38 356

原创 【无标题】

linux线程等待,cond和lock配合使用小练习 1 #include <iostream> 2 using namespace std; 3 #include <pthread.h> 4 #include <string>

2021-11-28 23:25:43 59

原创 linux-信号

信号闹钟操作 alarm(n) 闹钟,等s之后跳到闹钟结束进程linux 代码:让进程在1s后听到闹钟停止,打印count; 如果这1s内连续打印,因为有i/o count只到十几万,但是1s中自增时候没有打印,可以到几亿; 1 #include <stdio.h> 2 #include <unistd.h> 3 #include <stdlib.h> 4 #include <sys/types.h> 5 #inc

2021-11-13 17:47:59 842 1

原创 信号 kill -l

信号的linux操作13行:signal是重定义自定义哪个信号的怎样执行方法。这样子重定义之后,2号信号就不是中断了,而是打印上面的信息,我只是随便写了个,以方便测试。18行://这个代码是测试过core文件的截取,截取到后可以直接追踪到该错误信息处。//ulimit -a 查看core文件截取的方法是否打开,//ulimit -c (大小) 用来开启 core file size 的大小。 2 #include <stdio.h> 3 #include <sig

2021-11-10 22:52:02 738

原创 走迷宫问题。。字符串距离

字符串距离也是用str1的每个数据和str2比较,一层一层的下去 从每层元素的左边和上边两个位置找到最近的的位置,这样都能保证最后走到的是最小的位置,想起来可能比较抽象,但是画图之后,想想确实是这个道理。代码如下://字符串的距离int min(int x, int y){ return x < y ? x : y;}int main(){ string str1, str2; while (cin >> str1 >> str2) { int le

2021-11-09 19:48:27 72

原创 输出两个字符串的相同字符串的个数

eg:asdfaswerasdfaswer输出6我是用两个指针来操作的xs是长的字符串,ns是短的那个。因为每次从短的开始,遍历长字符串开始的头部,大的需要遍历短字符串的元素个数次。小的 每次从短的开始便利长字符串,相同啧开始一同向后遍历,如果长的不会遍历完全,则需要让短的在指向刚开始,长的从上次遍历的下一个位置开始遍历。#include <iostream>#include <string>using namespace std;int main(){ s

2021-11-03 18:46:17 950

原创 练习题,做错的不会的

一static int a = 1;void fun1(){ a = 2; }void fun2(){ int a = 3; }void fun3(){ static int a = 4; }int main(){ printf("%d", a); fun1(); printf("%d", a); fun2(); printf("%d", a); fun3(); printf("%d", a); return 0; // 1 2 2 2}static局部变量一旦成

2021-10-28 17:25:02 74

原创 跳石板问题,和一些选择题。

跳石板正确解法void get_div_num(int q, vector<int>& a){ for (int i = 2; i <= sqrt(q); ++i) { if (q%i == 0) { a.push_back(i); if (q / i != i) a.push_back(q / i); } }}int Jump(int n, int m){ vector<int > step(m + 1, INT_

2021-10-27 16:24:04 58

原创 linux进程间通讯,(父子进程间)

管道通讯(父读子写)互斥:任何时刻只能有一个人正在使用某种资源管道内部自动提供了互斥与同步机制如果写端关闭,读端就会read返回值0,代表文件结束如果打开文件的进程退出,文件也会被释放文件的生命周期随进程<管道的流式服务>管道是半双工,就是数据只可以向一个方向流动匿名管道,适合具有血缘关系的进程进行进程间通讯read :没有内容挂起write:没有空间挂起如若管道没有父进程读,就会读文件错误。read关闭,一直写,写方(child)被操作系统杀掉,写入无意义linux实

2021-10-25 22:27:13 571

原创 做题修正的正确答案

求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1 空间复杂度O(1)这个是不能是负数的操作,如果是负数,一直补符号位导致无法结束循环。int Max(int a, int b){ return a > b ? a : b;}int main(){ int num; while (cin >> num) { int count = 0, max_count = 0; while (num) { if

2021-10-25 19:34:45 159

原创 2021-10-19

求连续子数组最大和int Getmax(int a, int b){ return a > b ? a : b;}int main(){ int size = 0; cin >> size; vector<int> nums(size); for (int i = 0; i < size; ++i) { cin >> nums[i]; } int sum = nums[0]; int max = nums[0]; for

2021-10-19 22:46:54 93

原创 红黑树的插入和删除

RBTRee 插入节点:首先用BSTree的方法构造节点,然后创建一个真实的空节点,让所有没有真是子节点的节点都指向这个真实的空节点,而不是nullptr。插入之后的调平颜色和高度是问题的关键。以左子树为例,右子树为镜像操作。先找到叔伯节点,若叔伯节点不为空且颜色为红色,则父节点颜色改为黑色,叔伯节点变为黑色,爷爷节点变为红色,然后插入节点由原来的位置变成爷爷节点,然后向上回溯。这是一种情况。左边的直线插入 ‘ / ’ ,将父节点的颜色变为黑色,爷爷节点的颜色变成红色,然后进行一个右单旋转。如果是

2021-08-04 23:43:32 122 1

原创 AVLTree的编写规则

AVLTree 高度平衡的二叉搜索树 平衡因子 bf = rh - lh即利用bf=根节点的右树长度-左树长度的正负值,来将极端情况下的BSTree调节平衡。在AVLTree中,调节过程需要用到stack,stack先把插入的地址都存入栈中,直到不平衡出栈,找到父节点。‘ \ ’ 左单旋转 , ‘ / ’ 右单旋转 。‘ > '先右后左 , ‘ < ’ 先左后右 。Remove 的节点 最多只能有一个子女节点,如果没有,利用左右子节点调整数值。本次利用找到左子树的右子树的最大值

2021-08-02 23:00:27 74

原创 继承---目的:复用代码

继承:可以理解为将弗雷德代码拷贝一份给子类,但是构造和析构函数不可以继承。子类可直接调用父类的方法(公有方法)。保护方法可以在子类中用子类的方法调用父类的保护方法。保护继承会将父类的公有方法变成保护方法。(私有同样的性质 继承最小性原则)。父类的私有数据不可以访问如果不写继承方法,则默认为私有继承。struct是公有继承’复制件用性原则:子类对象可以以对象,指针,引用的方法给父类赋值。子类与父类有同名的方法则用子类访问时,访问的是子类的方法如果同名方法中子类给父类赋值后,同名访问父类方法

2021-07-19 00:12:59 69

原创 剑指offer 求1+2+3+...+n

要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)class Solution {public: class Sum { public: Sum() { _sum += _i; _i++; } }; int Sum_Solution(int n) { _i = 1;

2021-06-18 15:42:00 47

原创 文件管理操作之c++版本 cpp和流操作

首先来看一下c语言的操作//c语言的写入void main(){ int ar[] = { 10, 11, 22, 33, 44, 55, 66, 77, 88, 99 }; int size = sizeof(ar) / sizeof(ar[0]); FILE* fp = fopen("Test1.txt", "w"); assert(fp!=NULL); // "w" 是写入,创建一个fp的txt 功能是写入 for (int i = 0; i < size; ++i) {

2021-06-17 21:22:38 199

原创 模板的使用

先来个模板的随便使用template<typename Type, size_t _N=8>class SeqList{public: SeqList(int sz = SZ_SZIE) { capacity = sz > SZ_SIZE ? sz : SZ_SIZE; base = new Type[capacity]; size = 0; }private: enum{SZ_SIZE = 8};private: Type* base; size_t

2021-06-15 23:40:08 64

原创 priority_queue实现

废话不多说,直接上实现的代码要想实现这个,对于优先级的把控,操作得理解清楚相信各位看官仔细想想看我的注释,应该会看懂namespace ghc{ template<class T,class Container = vector<T>,class Compare = less<T>> class priority_queue { public: priority_queue(const T* first, const T* last, const Co

2021-06-11 00:08:07 117

原创 stack_queue的详细解释和使用

stack是栈,没有迭代器,以下是相关代码测试; //stack容器适配器 没有迭代器 不能用auto top:栈顶 pop:出栈namespace ghc{ template<class _Ty> class stack { public: stack()//list自己会做 {} ~stack()//list自己会做 {} public: bool empty()const { return _C.empty(); } size_t s

2021-05-24 15:32:41 152

原创 string的实现

因为代码中为了符合规范的函数名称,很多整数用size_t,但是操作时为了方便,不考虑-1,用int。代码的整体思路和链表的实现没有太大差距。新人学习所写,请酌情批评。#include<iostream>#include<assert.h>using namespace std;namespace ghc{ class string { friend ostream& operator<<(ostream& out, const str

2021-05-15 14:09:12 84

原创 list的c++实现

第一次写list的实现 要是有不小心错了的地方,请留言改正创建迭代器类,实质上就是封装一个节点指针,通过节点指针实现操作,至少要实现的操作符已说明。这两个类都要设置List为友元类,因为这样才能用List直接操作迭代器的相关操作。创建一个类,用来存放list的内容,不过可以用struct来代替,list可以写入初始值的构造和析构可暂时将迭代器理解成一个指针,该指针指向list中的某个节点迭代器中的函数用来进行各种基础操作写的不是很详细,不是很齐全。所写代码如下namespace ghc{

2021-04-21 16:40:56 120

原创 list和vector的小操作,刚学的,写写简单的操作

//使用list或者vector中的函数时候,得在前面加上关键字//实验vectorvoid main(){ vector<int> iv(5, 1); iv.reserve(100); // for (int i = 1; i <= 100; ++i) { iv.push_back(i); cout << "capacity = " << iv.capacity() << " "; } cout << endl;

2021-04-20 22:58:43 56

原创 list类,模板的操作

以下是总体的解释,代码处都有标识。首先定义一个模板类 用_Ty, 因为类型不同的类,所以统一用宏定义一些类型名。构造函数要用显示构造,针对于节点 写了三个函数操作定义了三个函数 伺候_Next的三个域 静态函数可以不通过对象调动,通过类名就可以调动既然已经写了_Acc所以在进行对创建的链表的前后指向操作时,用_Acc来找购买结点指针创建一个指针指向开辟的_Nodenamespace ghc{ template<class _Ty> class list { publi

2021-04-01 22:23:01 271

原创 模板

模板的存在是为了解决代码的冗余(重复性) 把类型当作参数传递,关键字 template例如交换函数本来这里需要写三个不同类型的函数,但是使用模板之后,只用写一个template<class Type>void Swap(Type& a, Type& b){ Type tmp = a; a = b; b = tmp;}void main(){ int a = 10; int b = 20; Swap(a, b); double c = 12.34;

2021-03-28 22:37:17 35

原创 对于class的浅拷贝的操作方法

因为深拷贝的资源浪费,所以相对于深拷贝,我们更希望浅拷贝的形式,但是浅拷贝又会有各种改动会引起所有的值变化,所以今天参考前人创作,写出如下代码。这个是最顶部 且用来存放数据的代码区域,相当于分装。因为上篇刚写到new,所以此处用new创造空间此处放一个计数器countincrement是用来统计 如果加一个指向 则count++decrement是用来 减少一个指向 则count–class String_rep{ friend class String;public: String_r

2021-03-24 17:59:30 247

原创 内存管理,new,delete的分析

*short ar[100] sizeof(ar)==400; (这是一个指针数组)局部变量 函数参数 在栈 (堆栈指的在栈区)malloc和new在堆中全局变量静态变量在静态常量区(数据段)如下图new和delete操作符new 1申请空间 2.调动构造函数new会调用构造函数 malloc不会delete 1.调动析构函数 2.释放空间delete会调用析构函数 free不会new如果想创建很多个构造函数 则必须有初始值 如果想给赋值,则只能调用一次函数构造和析构必须对等/

2021-03-22 23:07:36 59

原创 类成员的静态成员,友元函数,统计类的个数

各个描述下边就是代码,想试试的大哥可以试试普通方法可以调常方法,反过来不行;因为对this指针的限定不同普通方法可以调动静态方法,反过来不行;静态成员没有this指针静态方法可以用 类:: 调动//静态对象class Test{public: Test() :m_data(0) {}public: void fun() { m_data = 1; m_value = 10; print(); show(); } static void show() {

2021-03-21 23:00:18 212

原创 class 类 赋值运算符重载 operator的一点小使用

class 类赋值运算符重载 operatorC++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。函数名字为:关键字operator后面接需要重载的运算符符号。函数原型:返回值类型 operator操作符(参数列表)注意:不能通过连接其他符号来创建新的操作符:比如operator@重载操作符必须有一个类类型或者枚举类型的操作数用于内置类型的操作符 其含义不变.* ::

2021-03-15 13:53:03 767 1

空空如也

空空如也

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

TA关注的人

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