- 博客(59)
- 收藏
- 关注
原创 【Linux】进程间通信
进程间通信的本质:让不同的进程,能看到同一份系统资源(系统通过某种方式提供的系统内存)管道通信:匿名管道 and 命名管道:底层的原理是基本一样的。
2022-08-27 00:47:22
870
原创 【C++进阶】哈希的应用
第二种方法:40亿个数放进一个set/unordered_set,查找 x 在不在,因为会有额外的附带消耗,left,right,parent,col.1024*1024 KB = 1024*1024*1024 Byte = 2^30 Byte = 大约10亿 Byte。===》节省内存的角度出发:使用2^32个比特位的位图进行映射,2^32 bit = 2^29 Byte。因为2^30 Byte = 10亿 Byte = 1G ,所以2^29 Byte = 512 MB。第一种方法:排序+二分查找。
2022-08-21 00:48:57
754
1
原创 【Linux】进程等待
3:尽量父进程要晚于子进程退出,可以规范化进行资源回收。系统提供了一堆的宏,可以用来判断退出码,退出状态。目前我们所调用的函数,都是阻塞函数。2:需要获取子进程的运行状态。如何理解阻塞等待:父进程在等。1:回收僵尸,解决内存泄露。
2022-08-20 15:32:32
501
原创 【Linux】程序地址空间
Linux软件包管理器yum1.搜索: sudo yum list | grep cmd2.安装:sudo yum install [-y] cmd3.卸载:sudo yum remove [-y] cmd
2022-08-18 15:14:46
453
原创 【C++进阶】特殊类设计
相对于饿汉,不存在可能会导致启动慢的问题,并且可以控制顺序依赖问题。2,如果多个单例类,并且他们之间有依赖关系,那么饿汉模式无法保证。1,如果单例对象的构造函数中要做很多工作,可能会导致程序启动慢。第一个调用GetInstance时,才会创建初始化单例对象。缺陷单例对象时main函数之前创建初始化的。...
2022-08-02 14:56:49
375
原创 【C++进阶】哈希表
unordered_map和unordered_set的功能和map和set是一样的,区别在于其遍历出来不是有序的,同时他们的迭代器是单向迭代器,同时效率更高!
2022-07-18 20:29:56
1165
原创 【C++进阶】模板
目录类模板 模板的特化函数模板特化:类模板特化:全特化:偏特化/半特化模板分离编译=====>>> 分析解决方案:按需实例化 模板小结模板的特化函数模板特化:类模板特化:全特化:偏特化/半特化部分特化参数的更进一步限制:模板分离编译模板小结...
2022-07-05 00:00:49
551
原创 【C++进阶】红黑树
如果新增一个节点就新增一个红色节点:1,如果新增节点的父亲是黑色,则不需要处理2,如果新增节点的父亲是红色,则产生了连续的红色节点,需要分情况处理:情况二-1:u不存在,那么cur就是新增情况二-2:u存在且为黑的情况下,cur一定不是新增情况三-1:u不存在,那么cur就是新增情况三-2:u存在且为黑的情况下,cur一定不是新增==》回归到情况三-1...
2022-06-14 17:12:41
286
原创 【Linux】初识
什么是Linux?Linux是一款企业级后台操作系统,命令行方式交互,开源的!为什么操作系统会存在?有计算机,必有操作系统,给用户带来价值,使用计算机硬件的成本大大的降低,具有了大面积被使用的前提操作系统的作用?对上:给人(用户)提供一个良好的稳定(简单)的操作环境对下:和硬件打交道,进行合理的软硬件管理操作系统是什么?操作系统是一款进行软硬件资源管理的软件为什么要学命令行?因为更接近原系统Linux的目录结构是树状结构多叉树中非叶子节点一般是目.
2022-02-05 01:34:18
606
2
原创 【C++进阶】二叉搜索树
二叉搜索树的删除bool Erase(const K& key) { Node* parent = nullptr; Node* cur = _root; while (cur) { if (cur->_key < key) { parent = cur; cur = cur->_right; } else if (cur->_key > key) { parent = cur; .
2022-01-31 13:13:58
1360
原创 【C++进阶】多态
继承的概念和定义class Person{public: void Print() { cout << "name:" << _name << endl; cout << "age:" << _age << endl; }protected: string _name = "peter"; int _age = 18;};//Student继承了Person,Student中就拥有了Person的成员
2022-01-27 22:23:30
599
原创 【C++进阶】继承
继承的概念和定义class Person{public: void Print() { cout << "name:" << _name << endl; cout << "age:" << _age << endl; }protected: string _name = "peter"; int _age = 18;};//Student继承了Person,Student中就拥有了Person的成员
2022-01-26 11:26:43
943
原创 【C++初阶】Stack & Queue
目录栈和队列的模拟实现逆波兰表达式求值:OJ===》优化:vector的优缺点list的优缺点deque的优缺点栈和队列的模拟实现栈和队列的模拟实现逆波兰表达式求值:OJ中缀表达式->后缀表达式(逆波兰表达式)后缀表达式->运算class Solution {public: int evalRPN(vector<string>& tokens) { stack<int&g...
2022-01-15 18:47:29
417
原创 【C++初阶】vector(下)
vector的模拟实现:Gitee拷贝传统写法://v2(v1) //第一种传统写法 vector(const vector<T>& v) { //开一块空间 _start = new T[v.capacity()]; //拷贝有效数据过去 memcpy(_start, v._start, sizeof(T)*v.size()); _finish = _start + v.size(); _endofstorage = _
2021-11-22 00:16:06
826
原创 【C++初阶】vector(中)
目录vector模拟实现reserveresize迭代器失效inserterasevector模拟实现vector模拟实现:Giteereserve//开空间 void reserve(size_t n) { if (n > capacity()) { //动态申请n个T类型的空间 T*tmp = new T[n]; //从_start位置开始向后复制sizeof(T)*size()字节的数据到tmp的内存位置...
2021-11-21 00:49:32
1542
原创 【C++初阶】vector(上)
vector的遍历void test_vector1(){ vector<int>v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); //下标+[] for (size_t i = 0; i < v.size(); i++) { //v[i] -= 1; cout << v[i] << " "; } cout <
2021-11-19 23:06:20
1010
原创 【C++初阶】string(上)
template<class T>class basic_string{public:private: T* _a; size_t _size; size_t _capacity;};int main(){ string s1; string s2("hello"); cout << s1 << endl; cout << s2 << endl; //第一种遍历方式 for (size_t i = 0; i <.
2021-11-10 23:00:48
1310
原创 【C++初阶】C&C++内存管理
class Stack{public: Stack(int capacity = 4) :_a(new int[capacity]) , _size(0) , _capacity(capacity) { cout << "Stack(int capacity = 4)" << endl; } ~Stack() { delete[] _a; _size = _capacity = 0; cout << "~Stack()" <.
2021-11-04 23:25:15
844
2
原创 【C++初阶】类和对象(三)
开篇首先看一道题:设已经有A,B,C,D 4个类的定义,程序中A,B,C,D析构函数的调用顺序为:class A{public: A() { cout << "A()" << endl; } ~A() { cout << "~A()" << endl; }};class B{public: B() { cout << "B()" << endl; } ~B() { cout
2021-10-30 00:26:40
634
7
原创 【C++初阶】日期类的实现
1.获取某年某月的天数//获取某年某月的天数 int GetMonthDay(int year,int month) { assert(month > 0 && month < 13); static int monthDays[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; //闰年的2月是29天 if (month == 2 && (year % 4 ==...
2021-10-22 20:06:29
662
4
原创 【C++初阶】类和对象(二)
一,构造函数下面先看一段代码:class Date{public: void Init(int year, int month, int day) { _year = year; _month = month; _day = day; }private: int _year; int _month; int _day;};class Stack{public: void Init() { _a = nullptr; _top = _capacit.
2021-10-20 00:38:32
519
5
原创 【C++初阶】类和对象(一)
面向过程和面向对象初步认识C++不是一个纯面向对象的语言,C++既有面向过程,也有面向对象,可以混合编程C++兼容C结构体的语法同时C++中struct已经不仅仅是结构体,struct已经同时升级成类:直接用名称做类名C语言面向过程——数据和方法是分离的CPP面向对象——数据和方法是封装在一起的例如:访问限定符:C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。#defin.
2021-10-10 10:35:03
436
3
原创 【数据结构】二叉树经典基础习题
单值二叉树OJ:如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回true;否则返回false思路代码bool isUnivalTree(struct TreeNode* root){ if(root == NULL) return true; if(root->left && root->left->val...
2021-10-02 22:23:50
702
6
原创 【C++初阶】C++入门
命名空间首先,我们看下这段代码:#include<iostream>//头文件 using namespace std;//命名空间int main(){ cout << "hello world" << endl;//IO输出流 return 0;}思考:使用using namespacestd的作用是:?这里暂且放一下,我们先来学习一下命名空间命名空间定义:在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些.
2021-09-30 00:57:03
321
3
原创 【数据结构初阶】文章汇总!
第一篇:算法的时间复杂度和空间复杂度第二篇:顺序表第三篇:单链表第四篇:数据结构经典习题第五篇:栈和队列第六篇:双链表第七篇:二叉树 & 堆 & 堆的实现第八篇:二叉树链式结构的实现第九篇:八大排序算法(经典)第十篇:快排专题...
2021-09-24 22:08:20
237
2
原创 【数据结构】快排专题
版本1:左右指针void swap(int* px, int* py){ int tmp = *px; *px = *py; *py = tmp;}int PartSort(int*a, int left, int right){ /*int mid = GetMidIndex(a, left, right); swap(&a[left],&a[mid]);*/ int key = left; while (left < right) { //左边
2021-09-20 16:46:50
256
2
原创 【数据结构】二叉树链式结构的实现
二叉树的遍历:所谓二叉树遍历(Traversal)是按照某种特定的规则,依次对二叉树中的节点进行相应的操作,并且每个节点只操作一次。
2021-09-09 00:27:12
906
2
原创 【数据结构】二叉树 & 堆 & 堆的实现
一,树概念及结构树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。特点:·有一个特殊的结点,称为根结点,根节点没有前驱结点。·除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i<= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继,因此,树是递归定义的。二,二叉树概
2021-09-05 15:32:43
1538
7
原创 【数据结构】双链表
初始化:一开始先创建头结点,并且让哨并位的头结点指向自己,才能满足循环创建结点://创建结点LTNode* BuyListNode(LTDataType x){ LTNode* node = (LTNode*)malloc(sizeof(LTNode)); if (node == NULL) { printf("malloc fail"); exit(-1); } node->next = NULL; node->prev = NULL; n...
2021-08-28 21:59:38
1025
6
原创 【数据结构】栈和队列
1.栈栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。栈的实现栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。...
2021-08-27 22:07:07
977
5
原创 【数据结构】经典习题
习题1:给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。int removeElement(int* nums, int numsSize, int val){ int src = 0; int dst = 0; while (src < numsSize) { i...
2021-08-23 16:56:47
5815
8
原创 【数据结构】顺序表
顺序表可动态增长的数组,要求数据是连续存储的(类似通讯录,本文直接上代码哦)头文件SeqList.h:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<assert.h>typedef int SQDataType;typedef struct SeqList{ SQDataType* a; int size;//有效数据的个数 i
2021-08-11 17:02:32
245
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人