自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 资源 (2)
  • 收藏
  • 关注

原创 多进程并发服务器

父进程负责与客户端建立链接,子进程负责通信//TCPserve.c#include <stdio.h>#include <unistd.h> //linux标准头文件,包含了各种linux系统服务函数原型和数据结构的定义#include <sys/types.h> //基本数据类型头文件,包含有基本系统数据类型定义#include <sy...

2019-07-04 16:23:04 227

原创 leetcode 743. 网络延迟时间 c++

算法思路:通过迪杰斯特拉最短路径算法,求出从节点K出发到每一个节点的最短路径。其中最大值的就是所求结果,若有节点从未被访问过则返回-1。class Solution {public: typedef struct Dest{ Dest(int d, int w) :destnation(d), weight(w) {}; int destnation; int weig...

2019-06-24 18:53:16 419

原创 leetcode 113. 路径总和 II c++

算法思路:典型的递归算法,递归的回退条件1.当前节点为叶子节点并且路径之和满足条件 2.当前节点为叶子节点并且路径之和不满足条件在加入递归前判断一下是否为空节点,若为空就无需进入递归,以免回退的处理操作太混乱void pathSumCore(TreeNode* root, const int& sum, int& currentSum, vector<int...

2019-06-13 10:57:10 153

原创 leetcode109 c++

算法:第一步找到链表的中点将其作为根节点 第二步删除中点将链表一分为二 第三步递归上面的步骤快慢指针得到链表的中点ListNode* findMidNode(ListNode* head) { ListNode *slow, *fast; slow = head; fast = head; while (fast && fast->next...

2019-06-12 18:31:57 242

原创 linux多进程拷贝文件

#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/wait.h>#include <fcntl.h>#include <sys/stat.h>#include &lt...

2019-06-11 20:42:07 266

原创 leetcode 105. 从前序与中序遍历序列构造二叉树 c++实现

算法思路:前序:根左右中序:左根右根据前序和中序的特点可以得知,在前序遍历中寻找根节点,在中序遍历中将左右子树分开。依次递归下去就可以构造一个二叉树以其中一次为例:若前序中的根节点位置在中序的长度为len那么递归如下node->left = buildTreeCore(preorder, pre_start + 1, pre_start + len, inorder...

2019-06-11 17:25:19 532

原创 LeetCode 98验证二叉搜索树 c++

算法思路:递归判断根节点大于左侧子树的最右侧节点(即子树最大值),根节点小于右侧子树的最左侧节点(即最小值)其中寻找子树的最左最右节点分别写了一个递归函数 int leftMax(TreeNode* root) { int max = root->val; if (root->right) max = leftMax(root->right); re...

2019-06-10 11:56:21 180

原创 wait函数

三个功能阻塞等待子进程退出 回收子进程残留资源 获取子进程结束状态(退出原因)函数原型:pid_t wait(int *status);可以使用wait函数传出的参数status来保存进程的退出状态,借助宏函数来进一步判断进程终止的具体原因if(WIFEXITED(status))//结束状态 printf("status:%d\n", WEXITSTATUS(stat...

2019-06-06 11:27:31 162

原创 父子进程fork之后的一些注意点

fork()函数调用之后子进程从fork()语句之后开始执行,其原因是子进程复制了程序计数器 在刚刚fork之后父子进程之间的数据段(全局变量),栈段(局部变量),堆段(动态内存),代码段,程序计数器等都是相同的(在当前的linux版本中遵从的是读时共享写时复制的原则) 父子之间不同的是进程ID,fork函数的返回值 共享的是文件描述符以及mmap建立的映射区 全局变量是写时复制的例...

2019-06-05 20:51:06 786

原创 leetcode 92 反转链表 II c++实现

分为三步用四个指针,分别指向反转位置p,q以及第一个反转元素的pre和最后一个元素的next 反转p,q之间的元素 根据pre和next的情况来重新连接ListNode* reverseBetween(ListNode* head, int m, int n) { if (m >= n || head == NULL) return head; ListNode* ...

2019-06-05 20:06:27 183

原创 管道

管道是一种两个进程间进行单项通信的机制特点如下:数据只能由一个进程流向另一个进程(其中一个读管道,一个写管道);如果要进行双工通信,则需要建立两个管道。 管道只能用于父子进程或者兄弟进程间通信 int pipe(int fd[2]); 利用管道实现在父子进程间通信 #include <stdio.h>#include <stdlib.h>#inc...

2019-06-04 18:44:53 119

原创 waitpid笔记

//头文件#include <sys/types.h>#include <sys/wait.h>//函数原型pid_t waitpid(pid_t pid,int *status,int options);从本质上讲,waitpid是wait的封装,waitpid只是多出了两个可由用户控制的参数pid和options,为编程提供了灵活性参数的意义:...

2019-06-03 11:37:56 95

原创 使用wait函数回收子进程

进程一旦调用了wait函数,就立即阻塞周记,用wait自动分析是否当前的进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的消息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。//头文件#include <sys/types.h>#include <sys/wait.h&g...

2019-06-03 11:13:15 675

原创 僵尸进程

僵尸进程---子进程已经退出,但是父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中int main(){ /*fork一个子进程*/ pid_t pid = fork(); if (pid > 0)/*父进程*/ { printf("int parent process,sleep for one miniute...z...

2019-06-03 10:57:38 69

原创 父子进程之间的共享资源

在现有的Linux内核在实现fork()函数时往往是一种"写时赋值"的情况 父子之间的进程ID是不同的,其余大部分资源都是被复制的 在下面的例子中可以看到,全局变量,局部变量,动态申请的变量都是复制的,互不影响#include <stdio.h>#include <stdlib.h>#include <unistd.h>/*父子进程的共享...

2019-06-03 10:26:48 4231

原创 信号量---例子营业厅

用到的关键代码sem_t sem;//信号量int sem_init(sem_t *sem,int pshared,unsigned,int value);//初始化由sem指向的信号量,设置它的共享选项,并给它一个初始的整数值。pshared控制信号量的类型,如果其值为0,就表示这个信号量是当前进程的局部信号量,否则信号量就可以在多个进程之间共享。value为sem的初始值。i...

2019-05-29 20:22:23 119

原创 多线程出租车

有问题的实现-在出租车到达之后立马触发条件变量导致乘客白等#include "pch.h"#include<stdio.h>#include <pthread.h>#include <windows.h>#include <iostream>#pragma comment(lib, "pthreadVC2.lib")using n...

2019-05-28 11:22:50 213

原创 条件变量

为了让线程在等待满足某些条件时使线程进入睡眠状态,一旦条件满足,就唤醒因等待满足特定条件而睡眠的线程 关键代码 条件变量的初始化pthread_cond_t qready = PTHREAD_COND_INITIALIZER; 条件变量的阻塞以及唤醒pthread_cond_wait(&qready, &qlock);pthrea...

2019-05-27 20:38:12 71

原创 多线程的创建与结束-小例子火车票的售卖

先记录下用到的变量以及函数 phtread_t :一种新的数据类型,其定义是 typedef unsigned long int pthread_t pthread_create:线程创建函数,其原型是 intpthread_create(phtread_t * thread,const phtread_arr_t* arr,void* (*start_routine)(void...

2019-05-23 19:09:43 155

原创 vs+pthread配置

phtread库的下载:ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip 在自己的项目中配置好对应的包含目录以及库目录(下载文件的解压路径 <include><lib>) 如果出现类似windows下玩phtread还可能遇见这个问题: C2011 “time...

2019-05-23 15:05:27 503

原创 两个数组的交集II

vector&lt;int&gt; intersect(vector&lt;int&gt;&amp; nums1, vector&lt;int&gt;&amp; nums2) { hash_map&lt;int, int&gt; MapNums; for (int i = 0; i &lt; nums1.size(); ++i) { ++MapNums[nums1[i]]; ...

2019-03-14 11:37:17 124

转载 数组中的逆序对

int InversePairs(vector&lt;int&gt; data) { int n = data.size(); return process(data, 0, n - 1); } int process(vector&lt;int&gt;&amp; data, int start, int end) { //递归终止条件 if (start &gt;= e...

2019-03-13 14:32:36 62

原创 巧用异或运算

1.不借助temp,交换a,ba=a^b;b=a^b;a=a^b; 

2019-02-25 20:13:10 144

原创 vector中erase函数碰到的问题

erase(nums.begin()+n-m);需注意如果n大于nums.size(),即使n-m&lt;nums.size(),在代码运行的期间仍然会报错!

2019-02-16 16:30:21 351

原创 &运算

example:exponent &amp; 0x1看见这个0x你肯定知道这就是16进制表示了,而0x1就是最后一位肯定是1。偶数的二进制表示中最后一位肯定是0,如果是奇数那肯定是1,所以一个整数与0x1做按位与运算得到的结果是0或者1就可以判断出这个整数是偶数还是奇数需注意:位运算会将数转换成二进制数...

2019-02-16 15:46:55 380

原创 c++ map学习记录

1.map的本质是一类关联容器,其Key不可以修改,map的内部实现是一颗红黑树,因此其内部的数据都是有序的。2.map的功能是自动建立Key-value的意义对应的关系,值得注意的是key的类型必须支持&lt;操作符 根据key值可以快速的查找记录,其复杂度为log(N)3.往map中插入元素myMap.insert(pair&lt;int, string&gt;(1, "fir...

2019-01-20 17:34:44 140

转载 c++ 命名空间

本讲基本要求     * 掌握:命名空间的作用及定义;如何使用命名空间。     * 了解:使用早期的函数库 重点、难点     ◆命名空间的作用及定义;如何使用命名空间。    在学习本书前面各章时,读者已经多次看到在程序中用了以下语句:using namespace std;    这就是使用了命名空间std。在本讲中将对它作较详细的介绍。一、 为什么需要命名...

2018-11-28 10:11:47 160 1

转载 c++构造函数

构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。    如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。构造原则如下:    1. 如果子类没有定...

2018-11-27 09:36:13 374

转载 数组指针和指针数组的区别

数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;        //将该二...

2018-11-20 19:29:52 79

原创 DFS递归算法c++实现----实例迷宫问题

最近需要用到DFS算法,所以在网上查找相关的资料,文中的代码借鉴了以下这篇博客,并做了一些修改。https://www.cnblogs.com/majianqiang/p/8534418.html------借鉴博客网址做修改的内容:1.在迷宫问题中规定二维数组最左位置是入口,最右位置是出口。到达最右位置则结束搜索。2.path保存了搜索路径#include&lt;math...

2018-11-20 18:49:58 1132

原创 const char*和char* const的区别

char greeting[] = "Hello";char* const p = greeting;              //指针p是常量指针,即不可再次赋值,永远指向greeting。可以通过p改变greeting的值const char* p = greeting;              //不可以通过指针p改变指向对象greeting的值,但是可以改变指向。一般用在函数传参...

2018-11-12 19:53:53 1917 1

转载 c++构造函数

因为构造函数不会被子类继承,所以创建子类对象的时候,编译器会根据以下规则来调用父类的构造函数1.如果子类没有定义构造函数,则调用父类的无参构造    2. 如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。    3. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造

2017-11-08 16:11:34 280

传智播客毕业设计资料和代码

传智播客毕业设计资料和代码,黑马程序员上的网上商城毕业设计,非常齐全,利于学习,已经实现

2018-02-01

空空如也

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

TA关注的人

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