
C++
文章平均质量分 82
superSmart_Dong
这个家伙很懒,啥都不想写
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux C : select简介和epoll 实现
也就是说,当被监控文件有事件到来时,比如socket收到数据时,ep_poll_callback()会被回调.ep_poll_callback函数主要的功能是将被监视文件的等待事件就绪时,将文件对应的epitem实例添加到就绪队列中。通过struct file的poll操作,以回调的方式返回对象的等待队列,这里设置的回调函数是ep_ptable_queue_proc。都要建立监听,accept客户端连接,把客户端连接放在一个集合中,再将集合放到模型中管理,最后遍历有事件的文件描述符,进行通信。原创 2023-09-11 00:15:09 · 824 阅读 · 0 评论 -
C++ 线程池的实现
【代码】C++ 线程池的实现。原创 2023-08-27 21:02:51 · 437 阅读 · 0 评论 -
三次样条插值——三弯矩方法
三弯矩法是计算机主流的三次样条计算方式原创 2023-01-07 12:51:58 · 5254 阅读 · 0 评论 -
矩阵的投影、线性拟合与最小二乘法
矩阵的四大基础子空间、投影矩阵、最小二乘法原创 2022-08-14 16:46:06 · 2870 阅读 · 0 评论 -
Linux C : TCP/IP 和 网络编程
创建socket;绑定socket和端口号;监听端口号; (UDP省略)接收来自客户端的连接请求;(UDP省略)从socket中读取字符;发送消息回客户机。客户端套接字编程步骤如下创建socket;连接指定计算机的端口; (UDP省略)向socket中写入信息;从服务器接收消息。...原创 2021-11-23 22:04:10 · 5030 阅读 · 0 评论 -
Linux C: IO库函数,文件流缓冲,变参函数
一、I/O 库函数与系统调用 在Linux 中有很多关于IO(输入输出)的库函数,其大部分都存在 stdio.h 头文件中。例如fopen,fread,fwrite,fseek,fclose , 这些都是针对文件的,这些函数分别依赖于系统调用open,read,write,lseek,close其中fopen的第二个参数”打开模式“的说明如下:r , w ,a ,+, b,t 分别表示 读、写(清空内容)、读写、追加、二进制文件、文本文件 字符串(char * ) ...原创 2021-10-10 23:44:01 · 265 阅读 · 0 评论 -
Linux C: 文件操作相关的系统调用
一、常见的文件操作相关的系统调用二、st_mode 标志宏定义 值 含义 S_IFMT 0170000 文件类型位域的位掩码 S_IFSOCK 0140000 socket套接字 S_IFLNK 0120000 symbolic link 符号链接 S_IFREG 0100000 常规文件 S_IFBLK 0060000 块设备 S_IFDIR 0040000 目录 S_IFCHR...原创 2021-10-01 17:13:10 · 688 阅读 · 0 评论 -
Linux C: 信号及异常和捕捉函数原理
#define SIGHUP 1 终端挂起或控制进程终止 #define SIGINT 2 终端中断(Ctrl+C 组合键) #define SIGQUIT 3 终端退出(Ctrl+\组合键) #define SIGILL 4 非法指令 #define SIGTRAP 5 debug 使用,有断点指令产生 #define SIGABRT 6 由 abort(3)发出的退出指令 #define SIGIOT 6 IOT 指令 #define原创 2021-08-19 00:32:05 · 1637 阅读 · 0 评论 -
Linux C: 定时器及时钟服务
一、定时器种类对于 Intel x86有多个定时器: 1) 实时时钟 (RTC): RTC 由一个独立的小型备用电池供电。通常用于提供计算机的时间和日历信息。即使在计算机断电的情况下,RTC 还是可以独立得进行计数。在所有类Unix 系统中,时间变量是一个 long int 型,记录自1970/1/1 起经过的秒数。 2)可编程的间隔定时器(PIT) : PIT是与 CPU分离的一个定时器,以毫秒为刻度。在所有IO设备中,PIT 可以最高优先级 IRQ0 中断。PI...原创 2021-08-11 21:33:38 · 672 阅读 · 0 评论 -
Linux C :线程操作和线程同步的多线程并发编程
在这之前可以先看看这边文章了解线程概念,信号量,条件变量,死锁等概念https://blog.youkuaiyun.com/superSmart_Dong/article/details/116668370 于进程相比,线程的创建和上下文切换更快。一个进程可以有多个线程,而这些线程都可以访问自身进程的所有资源。而进程的切换,则涉及到用户态转内核态的过程,原先的内存资源可能也要从外存中重新换页换回内存里。进程的创建需要重新分配内存和构建页表等相关数据结构,而线程于进程公用同一个内存空间,除了...原创 2021-07-18 23:22:56 · 1279 阅读 · 2 评论 -
Linux C:管道的实现原理,命名管道
目录一、管道二、利用管道将写进程和都进程连接起来三、命名管道一、管道在Unix/Linux 中 命令行 cmd1 | cmd2 #例如 history | grep sqlplus其中 cmd1 是 cmd2 是Linux中独立的程序 , 而 “ | ” 符号在Linux 称之为管道。管道一端用来读另一端用来写。 把前一个进程的输出结果作为后一个进程的输入参数。例如history | grep sqlplus 命令,前...原创 2021-07-11 01:03:43 · 2100 阅读 · 1 评论 -
Linux C:文件描述符、IO重定向、恢复标准输入输出
在Linux中,文件描述符是一个非负整数的数据类型。是FILE结构体中的一个成员属性。每打开或者新建一个文件时,内核都会返回最小的且未被使用的非负整数,即文件描述符。例如,文件描述符 0,1,2,4,5...已经被该进程使用了,那么再打开一个文件返回的文件描述符就是3,再打开一个新文件就是6。如果文件描述符被关闭,那么文件描述符在下一次可能会重新被打开。 FILE结构体大致如下-----------FILE Structure---------char fbuf[SIZE...原创 2021-07-08 02:43:06 · 2232 阅读 · 1 评论 -
Linux C :系统调用-fork,wait,subreaper
fork():创建子进程,并返回进程id。 wait(&status):等待子进程终止。如果成功则会返回僵尸子进程的pid,status的值会是子进程的exitcode。 exit(value):进程正常退出,并返回退出值value prctl(PR_SET_CHILD_SUBREAPER):设置当前进程为subreaper进程。零、示例代码即可能的输出结果#include <stdio.h>#include <unistd...原创 2021-07-03 00:35:02 · 774 阅读 · 1 评论 -
Linux C : 进程管理实验:创建进程、上下文切换
//// Created by Administrator on 2021/6/7.//#ifndef PROCESSMANAGEMENT_TYPE_H#define PROCESSMANAGEMENT_TYPE_H#define NPROC 9#define SSIZE 1024 enum ProcStatus{ FREE=0, READY, SLEEP, ZOMBIE }; typedef str.原创 2021-06-26 22:52:20 · 548 阅读 · 3 评论 -
Linux C: 内嵌汇编语法
学内嵌汇编首先知道编译器的编译流程,内嵌汇编就是嵌套在高级程序语言中的汇编语言。在cpp 文件转成 .s 汇编文件时,只有高级程序语言会转成汇编,把qian原创 2021-06-05 18:49:05 · 1793 阅读 · 0 评论 -
Linux C: 为什么C都必须有一个main函数
gcc的编译过程分为三步:第一步将 *.c 文件分别通过编译器解析成汇编语言 *.s 。第二步将*.s 文件分别通过汇编器生产目标文件 *.o 。第三步将 c.o文件通过链接器合成一个out 的可执行文件 。当执行.out 或者 .exe 可执行文件时,程序入口通常是main 函数,一个程序中,必须要有一个入口函数来告诉链接器指明代码从哪里开始执行。只不过大部分连接器的默认函数入口都是main函数。当然你也可以告诉链接器,入口函数是不是main...原创 2021-05-16 15:43:43 · 1022 阅读 · 0 评论 -
Linux C : GDB调试命令汇总
GDB 是GNU的一个交互式调试工具,可以调试C、C++ 和其他几种语言编写的程序利用 gcc -g [源文件列表] -o [调试文件.x] 来生成调试文件 生成调试文件后 gdb [调试文件.x] 进入调试。命令类型 GDB命令 含义 backtrace(或bt) 查看各级函数的调用和参数 finish 运行到当前函数末尾 frame(或 f) [栈帧号] 查看栈帧情...原创 2021-05-08 22:06:57 · 282 阅读 · 0 评论 -
Linux C : Makefile 的编写和示例
make工具是Unix/Linux 的一个编译工具,它按照顺序读取 Makefile 或 makefile ,进行自动地有选择地执行编译链接,只对影响到的修改的文件进行重新编译,不需要对整个工程进行重新编译。而Makefile中些内容的就是它的编译方式。 Makefile 的格式: 目标项 依赖项列表 [target] : file1 file2 file3 ... 规则 <tab> ...原创 2021-05-06 20:54:18 · 590 阅读 · 0 评论 -
Linux C : 静态链接库和动态链接库
gcc的编译过程分为三步:第一步将文件1.c 分别通过编译器解析成汇编语言第二步将文件1.s文件2.s文件3.s 分别通过汇编器 生成obj目标代码文件第三步将 这些文件通过链接器生成 out 的可执行文件 ,将多个目标代码文件合成一个文件而在第三步中链接方式有两种,一种是静态链接,另一种是动态链接。例如 A文件引用了B文件 ,所谓静态链接,就是将A和B打包进同一个最终可执行文件中。而动态链接,函数库B无需打包进可执行文件中,当A也需要引用到B时,A通过读链接...原创 2021-05-02 15:10:19 · 391 阅读 · 0 评论 -
Linux C :C的汇编码生成
想知道一段C语言写的代码对应生成的汇编语言代码是什么?1)一些基本的编码过程原理2)需要了解常用的寄存器有哪些,专门来做哪些事3)C语言对应的代码堆栈情况C的汇编代码是一个或多个cpp文件通过编译器处理而成的,而一个编译器通常要通过词法分析,语法分析,语义分析才能够生成汇编代码。以gcc为例,一个cpp文件同通过编译器生成汇编代码(*.s)文件,再通过汇编器生成出机器能够识别的指令代码(*.o)文件,最后同通过链接器,将多个指令文件合成一个大指令文件(*.out) 供机器去执行。...原创 2021-04-22 23:14:41 · 1708 阅读 · 0 评论 -
Linux C :Linux 下第一个C程序
我首先用QQ管家下载VMware Workstation中的虚拟机,然后下载Ubuntu64的映像,开启了Linux之路。 搞了些设置后,成功启动Linux ,添加自身Window 和 虚拟机上Linux的共享目录方便传文件。再添加些软链接(快捷方式)来方便访问文件夹。 一般刚开始用VIM 编辑本文,操作起来比较不方便。所以一般现在Window上编辑好,然后将文本复制到Linux中。 首先创建 .c的文件在此下编辑 ,我的时helloworld.c...原创 2021-04-16 21:54:16 · 607 阅读 · 0 评论 -
C++ :跳表数据结构的实现原理
所谓的跳表,就是在有序链表的基础上加上索引层,在索引层的基础上还可以再加索引层,从而提高链表的查询效率,一般情况下也可以提高插入和删除效率。-----------------------------------------------------------------------目录一、跳表的数据结构二、重建索引三、根据位置确定数据节点四、根据元素data信息来查询元素位置五、插入和删除一、跳表的数据结构 跳表由索引层链表和数据层链表组成,数据层链表由...原创 2020-12-28 23:57:00 · 716 阅读 · 1 评论 -
C++ : 矩阵初等行变换,化成最简矩阵
化成最简矩阵分成如下步骤从矩阵的第 i=0 行开始化简1.寻找最长元素行:从第i行开始,寻找第一个开头行元素非0的行,利用行交换把该行换到矩阵的第i行。2.对第i行进行化简:对第i行的所有元素同除该行的首个非0元素。3.矩阵行化简: 从矩阵的第 j=0 行开始。与第i行首个非0元素同列的元素,即为行化简的倍数,每行减去该 倍数*第i行的值就得到了一次行化简的结果 ,回第1步,i++。/** * 矩阵行变换成最简矩阵 * @tparam ElemType * @return.原创 2020-12-11 00:12:00 · 4956 阅读 · 0 评论 -
时间复杂度、渐进记法、主定理
时间复杂度反应了一个程序的运行时间关于实例个数变化而变化规律。在一个排序程序中,可能比较了 2n 次,但是执行步数可能达到了 2n^3 ,就不能直接判定程序运行时间是 n 的线性函数。两个程序比较次数一个是3n,一个是2n 那么不能说前者的花费的时间就要更慢些,因为在总的执行步数上未必会比后者多。当实例个数足够多的时候,计量时间的方法叫做渐进记法,最常用的是 O(g(x)) 表示。其他常用还有 o , Ω , Θ 记法。一 、 大 O 记法当实例个数n足够多时 ,程序执行总步数 f(n) ...原创 2020-11-26 00:47:37 · 988 阅读 · 0 评论 -
内部排序选择、冒泡、插入、希尔、快速、归并、堆排序原理概要和实现
目录一、选择排序二、冒泡排序三、插入排序四、希尔排序五、快速排序六、归并排序七、堆排序八、代码和调用一、选择排序 在线性表中,分为排好序的前一部分V和还未排好序U的后一部分,刚开始整个线性表都是未排好序的。选择排序就是在未排好序U集合的部分每次选择最小值换到最前面。然后纳入集合V。二、冒泡排序 冒泡排序,每次排序比较连续两个相邻的元素,小的交换到前面,大的交换交换到后面,达到每次排序小元素“浮"数组前面或大元素"沉"到数组后面的过程。...原创 2020-11-16 00:15:44 · 354 阅读 · 0 评论 -
C++ : 二进制法生成子集
一个有 n 个元素的集合 (n >=0,n为整数),可以生成 2^n个子集。例如 {a,b} 可以生成4个子集 {空}、{a},{b}{a,b}二进制法就是 从0到 2^n用二进制表示,为1的对应的数组位置元素 纳入子集集合。例如 a = {a,b,c,d} 有 16个子集,建立如下表十进制数 二进制数 1对应的数组元素 结果集 0 0000 空 1 0001 a[3] d 2 0010 ...原创 2020-11-01 23:25:56 · 838 阅读 · 3 评论 -
C++ : STL常用算法: inner_product , sort ,itoa
目录1.std::count2.std::inner_product3.atoi4.itoa5 is_sorted 6 sort7. fill1.std::countcount(_InputIterator __first, _InputIterator __last, const _Tp& __value)在头文件algorithm 中,用来记录线性表 从 __first 到 __last 中出现 __value的次数#i...原创 2020-11-01 22:09:50 · 573 阅读 · 0 评论 -
C++ : 返回两个字符串的最长公共字符串
原理: x 轴和 y 轴分别取 自身和 str2 然后表格对齐,相同的字符 设成 1 其他为 0 ,取斜对角线 最长不为 0的字符串极为公共子字符串例如asbbefg 和 aubeg 最大值2 a s b b e f g a 1 0 0 0 0 0 0 u 0 0 0 0 0 0 0 b 0 0 1 1 0 0 ...原创 2020-10-24 02:02:02 · 848 阅读 · 0 评论 -
C++ 数据结构-图相关操作的算法思路
目录1.回路的判断:2.普利姆-最小生成树3.克鲁斯特卡尔-最小生成树4.迪杰斯特拉-最短路径5.图的最长路径(不走重复路)6.有向无环图的关键路径1.回路的判断:用深度优先遍历,在有向图中如果遍历过程中重复访问到已经访问过的点,那么这个有向图就是就是有回路;如果是无向图,重复访问到了祖先结点那么这个无向图就存在回路。2.普利姆-最小生成树需要输入一个开始结点,新建一个对象数组arr [ size](nodeIndex,lowcost) ,其中nodeIndex...原创 2020-09-26 02:05:31 · 496 阅读 · 0 评论 -
C++ : 构造函数,拷贝构造函数,移动构造函数,拷贝赋值运算符,移动赋值运算符应用场景
#include <iostream>using namespace std;class ConstructTest{public: ConstructTest(){ cout<<"default Constructor\n"; }; ~ConstructTest(){ cout<<"Destructor"<<endl; } ConstructTest(int...原创 2020-08-24 00:40:09 · 1360 阅读 · 0 评论 -
C++ :Signal: SIGSEGV (Segmentation fault) ,深拷贝
C++在运行时出现Signal: SIGSEGV (Segmentation fault) 问题,通常是访问了系统给这个程序所分配以外的内存空间。从而出现段错误,经常在使用指针时会出现。例如bounds_ =(int *)malloc(2 * sizeof(int))bonuds_[0]= 0 ;bonuns_[1]= 1 ;base = bound;cout<<base[0]; // 0 free(bound);cout<<base[0]; //S.原创 2020-08-18 00:57:24 · 25166 阅读 · 0 评论 -
C++ : 可变参数 va_list ,va_start ,va_arg 的使用方法
exemple;#include <iostream>#include "sdstructure/linearlist/array.cpp"using namespace std;using namespace SmartDongLib;void show(int dim,...){ va_list ap; va_start(ap,dim); for (int i = 0; i < dim ; ++i) { cout<<.原创 2020-08-12 22:59:20 · 1540 阅读 · 0 评论 -
C++ : KMP 字符串匹配算法
在传统字符串匹配中我们求得字符串p出现在字符串s中的位置。我们把字符串s称为主串,字符串p称为模式串。KMP算法的原理简单来说就是匹配的时候不回溯主串的指针i,而只回溯模式串指针j ,即匹配过程中,不移动主串,指移动模式串来达到"尽可能向右滑动最大的距离"。num 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20原创 2020-08-11 02:54:39 · 531 阅读 · 0 评论 -
C++ 正态分布、概率累积密度函数的使用(boost库)
在C++11以上中在# include <random> 头文件中包含了std::normal_distribution<>b;正态分布函数。当然也可以下载boost库,里面已经有包装好的正态分布函数。1.boost库可以在https://www.boost.org/中进行下载最新版的2.boost库导入C++工程的方法可以参照博客https://blog.cs...原创 2019-10-16 00:21:11 · 9670 阅读 · 1 评论 -
idea.config.path is invalid 问题
今天把别人的CLion和MinGW文件夹从别人的电脑上拷过来的,结果打不开Clion报了这个问题。Config path 'G:\Program File\.IntelliJIdea11\config' is invalid. If you have modified the 'idea.config.path' property please make sure it is correct,...原创 2019-08-09 21:03:01 · 3622 阅读 · 0 评论 -
CLion 生成CMakeList文件和include文件不存在问题
今天导入在Clion上导入了一个其他开发环境下开发的项目,虽然能看得到代码,但是也只能看得到代码了,想要代码跳转,查看声明啥的都看不了,编写错误也不会提示,也不能编译执行。查找原因原来是没有CmakeList,txt文件,但是代码文件那么多,我也不可能一个一个手配CmakeList,所以就网上找方法....一.没有CmakeList文件时找到菜单栏File中的import projec...原创 2019-08-09 20:36:26 · 23043 阅读 · 2 评论 -
Clion生成动态链接库.dll
今天研究如何生成动态链接库.dll文件纠结了好久。在保证代码文件不报错的情况下,可能要注意几个方面。一·项目结构要完整。Clion项目生成后会和其他编程工具不同的地方在于会有一个CMakelist文件和cmake-build-debug文件夹。如果没有Cmakelist可以使用importProject重新导入项目:https://blog.youkuaiyun.com/superSmart_Dong...原创 2019-08-16 23:15:02 · 13895 阅读 · 3 评论