C/C++
文章平均质量分 83
iduanbin
Stay hungry. Stay foolish
展开
-
trie树-单词树-实现敏感词屏蔽和词频统计
文章目录一、单词树介绍二、实现思路2.1 词频统计和单词查找2.2 敏感词屏蔽三、代码实现前几天都看一个敏感词屏蔽算法的文章,写的挺好,顺着思路写了下去,实现了一下,算法效率还是杠杠的。。。一、单词树介绍利用的是单词树的算法,先看看什么叫单词树。单词树也叫trie 树也称为字典树。最大的特点就是共享字符串的公共前缀来达到节省空间的目的。例如,字符串 "abc"和"abd"构成的单词树如下:...原创 2019-12-12 21:07:21 · 1061 阅读 · 0 评论 -
epoll+多进程服务器模型 | C++
多个进程同时监听一个端口,如果外部有连接,多个进程通过内核实现的竞争机制,就会有一个被唤醒。直接上代码:int main(){ // 创建服务器 int fd = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_...原创 2019-10-24 12:52:45 · 436 阅读 · 0 评论 -
利用条件变量实现进程间同步示例讲解
文章目录[1] get_cond_wait.c 初始化条件变量和锁函数[2] cond_signal.c 发送信号函数[3] cond_wait.c 等待信号函数[4] Makefile[4] 运行结果[1] get_cond_wait.c 初始化条件变量和锁函数#include "public.h"char* get_cond_wait(const char* filename, pth...原创 2019-07-13 17:20:58 · 1464 阅读 · 0 评论 -
SMTP,MIME,POP,IMAP之间的关系
SMTP:邮件发送协议;MIME:一种数据格式,可以是图片和语音,广泛用于邮件、web等地方;POP:邮件接收协议;IMAP:邮件接收协议,但是他是在服务器端直接处理邮件,比如可以在一个邮件含有10个附件的情况下只下载第七个附件。而且IMAP在服务器上对“已读/未读”信息和邮件进行分类管理。这样可以做到多终端的邮件同步,比如手机和电脑。;...原创 2019-07-10 22:11:05 · 3799 阅读 · 0 评论 -
无锁生产者与消费者模型实例-线程
无锁的话就是要两个线程不能同时访问一个变量。那么这样就干脆用两个任务链表,如果在读队列里面的任务处理完成,同时写队列里面又有任务了,就交换两个队列,交换任务队列的动作由主线程来实现。基于这种思想代码如下:#include "public.h"#include <list>using namespace std;list<int>* queueMain;list...原创 2019-07-15 15:43:43 · 752 阅读 · 0 评论 -
SGI iota() 函数
是SGI中的函数不是STL的。iota(iterator first, iterator last, value),是将first和last区间直接赋值,value, value+1, value + 2。。。源码如下:void iota(ForwardIterator first,ForwardIterator last,T value) { while (first != las...原创 2019-07-11 11:13:12 · 178 阅读 · 0 评论 -
C++ | 虚析构函数
虚析构函数是用来解决,使用了基类指针调用子类的时候,到最后释放内存的时候,父类调用的是自己的析构函数而没有调用子类的析构函数,所以需要重写子类的析构函数。总之,是为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对象。#include<iostream>using namespace std;class People{public: People() { ...原创 2019-07-29 11:48:06 · 128 阅读 · 0 评论 -
C++ | 宏定义只替换不组合原则
举个栗子:#include <stdio.h>#define MOD(x, y) x * y#define MOD1(x, y) x % y// 宏定义只替换不组合int main(int argc, char const *argv[]) { int x = 2, y = 2; printf("%d\n", MOD(x, y + 2)); // 6 ...原创 2019-07-25 18:53:06 · 571 阅读 · 1 评论 -
C++中 # 和 ## 的用法
一句话总结:#是连接字符串的,##是用来粘合的(比如一个名字,或者一个值)。举个栗子:#include <stdio.h>#define CAT(x, y) x ## y#define CAT_STR(x) "hello: " # x#define f(a, b) a##b#define g(a) #a#define h(a) g(a)int main(int ...原创 2019-07-25 18:53:48 · 1753 阅读 · 0 评论 -
C++ | for_each-仿函数-lamda表达式
文章目录[1] 普通for_each使用仿函数[1] 普通for_each使用仿函数,仿函数自带参数[2] for_each使用匿名仿函数-lamda表达式[1] 普通for_each使用仿函数#include <iostream>#include <vector>#include <algorithm>using namespace std;st...原创 2019-07-22 18:19:55 · 339 阅读 · 0 评论 -
C++ | fork()进程之后,子进程继承的属性
fork后,子进程继承了父进程很多属性,包括:文件描述符:相当与dup,标准输入标准输出标准错误三个文件账户/组ID:进程组ID会话ID控制终端set-user-ID和set-group-ID标记当前工作目录根目录umask信号掩码文件描述符的close-on-exec标记环境变量共享内存内存映射资源限制但是也有一些不同,包括:fork返回值进程ID父进...原创 2019-08-01 11:49:28 · 504 阅读 · 0 评论 -
https握手过程
浏览器将自己的SSL加密组件(RAS加密算法、对称加密算法、hash摘要算法+密钥长度) 发送给请求网站;网站会从中选出一组加密算法和hash算法,并将自己的身份信息以证书的方式发回浏览器。浏览器验证证书的正确性,或者用户接收了不受信任的证书,浏览器会生成一串随机的密码,并用证书的公钥加密,同时使用hash算法计算握手信息,并用随机密码加密,将这些所有的信息发送给网站;网站用私钥解密信息,...原创 2019-08-01 16:10:13 · 396 阅读 · 0 评论 -
阶乘的缓存算法
阶乘一般都是用递归的方式,但是在重复使用阶乘的场景,就需要使用缓存了,这样就能提升很大效率了。如下:#include <iostream>#include <vector>#include <string.h>#include <algorithm>using namespace std;int n = 6;int* cache = ...原创 2019-08-02 11:06:31 · 162 阅读 · 0 评论 -
libcurl实例使用:用post方式发送数据
文章目录一、准备二、程序实例-发送一个post请求三、总结今天得空来整理以前的笔记,看到了libcurl。稍微整理记录再加上顺带复习一下。一、准备下载官网链接:https://curl.haxx.se/编译三步走cd curl./buildconf./configuremakesudo make install二、程序实例-发送一个post请求#include <...原创 2019-08-20 14:47:38 · 3574 阅读 · 0 评论 -
STL数据结构总结
文章目录【1】vector【2】list【3】deque【4】stack【5】queue【6】heap【7】priority_queue【8】slist【9】关联式容器【10】rb_tree 红黑树【11】set【12】map【13】multiset【14】mutimap【15】hashtable【16】hashset【17】hash_map【18】hash_multiset【19】hash_mu...原创 2019-08-20 16:21:27 · 789 阅读 · 1 评论 -
线程退出函数pthread_cancel() 采坑点
pthread_cancel() 时用来线程退出的,但是在使用的时候还是有一些要注意的地方。如下代码:static void* pthread_func1(void* arg){ while(1) { printf("haha\n"); sleep(1); } return NULL;}static void* pthrea...原创 2019-07-13 14:54:52 · 8075 阅读 · 2 评论 -
STL | difference_type的使用
difference_type使用来表示两个迭代器之间的距离的。STL源码剖析中的代码:template<class I, class T>typename iterator_traits<I>::difference_type count(I first, I last, const \ T& value){ typename iterat...原创 2019-06-17 17:59:50 · 3916 阅读 · 0 评论 -
C语言单例实例
1) 懒汉模式 User.hclass User {public: static User* instance();private: User(); static User* _user;};User.cppUser::User() { }User* User::_us原创 2017-01-12 20:31:01 · 1475 阅读 · 0 评论 -
C程序的效率优化建议
规则一编程时要经常注意代码的效率。在保证软件系统的正确性、稳定性、可读性及可测性的前提下,提高代码效率。代码效率分为全局效率、局部效率、时间效率及空间效率。全局效率是站在整个系统的角度上的系统效率;局部效率是站在模块或函数角度上的效率;时间效率是程序处理输入任务所需的时间长短;空间效率是程序所需内存空间,如机器代码空间大小、数据空间大小、栈空间大小等。规则二局部效率应为全局效率服务,不能因...原创 2019-01-26 17:50:44 · 808 阅读 · 1 评论 -
结构体位段的长度计算
struct A{ unsigned char a1:2;};struct B{ char a1:3; int a2:29;};int main(){ struct A a = {0}; printf("a = %d\n", sizeof(a)); a.a1 = 5; printf("a = %d\n", a.a1); struct B b; b.a1 = ...原创 2019-05-16 14:43:21 · 984 阅读 · 0 评论 -
libevent通信库实例
安装下载完libevent后:1. sudo apt-get install automake libtool2. cd libevent3. git checkout 2.0.23-stable-rc4. ./autogen.sh5. ./configure6. make7. sudo make install1)进入到libevent目录,...原创 2017-01-12 21:02:34 · 245 阅读 · 0 评论 -
tufao安装和实例详解
安装tufao 获取代码 github 编译和安装 sudo apt-get install cmake qtsdk 在tufao目录下创建build目录 cd build cmake .. -DCMAKE_INSTALL_PREFIX=/usr make sudo make install...原创 2017-01-12 20:58:45 · 3074 阅读 · 0 评论 -
select和epoll实例详解
> selectselect的作用是,让内核监听一个fd集合,当集合中的fd有事件时,select会返回有消息的fd子集。/*nfds 代表最大描述符加一readfds 代表要读的文件描述符集合writefds 代表可写的文件描述符集合exceptfds 代表检测有异常的文件描述符集合timeout 代表等待的时间,如果为NULL就一直等待返回值:代表有...原创 2017-01-12 20:53:09 · 393 阅读 · 0 评论 -
sigaction和sigqueue
sigaction和signal一样用来注册信号处理函数,siqqueue和kill一样,用来发送信号,但是sigaction比signal功能强大,signal比较简单。int sigaction(int signum, const struct sigaction *act, struct sigaction* oldact /*保存老的sigaction*/);s...原创 2017-01-12 20:50:22 · 315 阅读 · 0 评论 -
libcurl安装和简单实例
libcurl 官网:https://curl.haxx.se/libcurl也是curl工具使用的库可以到官网下载,更方便的是到github上克隆代码git clone https://github.com/curl/curl.git编译和安装cd curl./buildconf./configuremakesudo make install安装完毕之后,头文件/usr/...原创 2017-01-12 20:34:44 · 828 阅读 · 0 评论 -
C语言不定参数实例详解
不定参数函数定义: 第一种:设定有多少个参数,来标志不定参数的结束 第二种:设定最后一个值为空,来标志不定参数的结束#include "../h.h"#define mylog(fmt, ...) myprint(__FILE__, __LINE__, fmt,##__VA_ARGS__)void myprint(const char* filename, in原创 2017-01-12 20:22:24 · 536 阅读 · 0 评论 -
cJson实例解析
cJSON下载1)可到gitbub上下载 地址:https://github.com/kbranigan/cJSON2)只需将cJSON.h 和 cJSON.c 文件拷贝到所需使用的目录即可使用实例{ name: "tom", age: 18, man: true}注:1) key永远是stri...原创 2017-01-12 20:43:10 · 762 阅读 · 0 评论 -
Linux C写日志文件
dLog.c#include "dLog.h" //dlog.h文件在后面/********************************************************** function: dLog description: 写日志信息 Input: dIfomSource: 信息来源 dIfomLevel: 信息级别原创 2017-08-13 10:44:50 · 2946 阅读 · 0 评论 -
Makefile :=和=区别
1、=会在整个文件中搜索完再赋值:a=hellob=${a}worlda=hi运行结果:a=hi, b=hiworld2、:=不会搜索后面的值a=hellob=${a}worlda=hi运行结果:a=hi, b=helloworld原创 2017-08-14 21:07:14 · 179 阅读 · 0 评论 -
C++ | socket服务端与客户端通信小实例
今天偶尔翻到了很久以前写的socket建立通信的小例子,里面居然还奢侈的加了select 多路复用,加了注释发出来。一、 服务端:#include <iostream>#include <stdio.h>#include <sys/socket.h>#include <arpa/inet.h>#include <unistd.h&g...原创 2019-05-28 17:44:58 · 425 阅读 · 0 评论 -
STL | value_type的使用
value_type 是用来表示迭代器所指对象的类别的。STL源码剖析中的栗子:template<class T>class list{public: typedef T value_type; //……};里面的value_type实际就是传入模板的类型,见以下栗子,说明它能够很好的返回模板类型。#include <list> #i...原创 2019-06-17 17:58:47 · 2563 阅读 · 0 评论 -
C语言回调函数(实例)
> 函数指针变量做函数参数(回调函数)函数参数除了是普通变量,还可以是函数指针变量:void fun( int x ) //形参为普通变量{}void fun( int(*p)(int a) ) //形参为函数指针变量{}函数指针变量常见的用途之一是把指针作为参数传递到其他函数,指向函数的指针也可以作为参数,以实现函数原创 2017-01-12 20:27:15 · 453 阅读 · 0 评论