![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 83
互联网并非法外之地
这个作者很懒,什么都没留下…
展开
-
百度paddle ocr 的集成
关于百度OCR集成和模型训练Welecome to hc's Class敌军还有三分分钟到达战场基于windows+C++的编译提醒:我的配置开始编译windows+python版Welecome to hc’s Class你好!感谢你百忙之中抽空看了我的这篇工作总结,这篇博客主要记录我对于百度(Paddle)OCR的使用以及从中训练自己的数据的经过以及走过的一些弯路,避免读者也跟傻逼博主一样走向不归路敌军还有三分分钟到达战场首先肯定要做的是下载paddleocr:点击此处下载:下载网址亲,这边原创 2021-06-28 09:15:20 · 566 阅读 · 0 评论 -
命名空间、与c的数据类型的区别、中和函数、引用
一、c++介绍由本加尼斯特劳斯特鲁普于1979年4月份至1979年10月份完成了第一个C++的预处理,为C语言增加了类机制,也就是面向对象,也就是C++区别:1、c++完全兼容C语言2、支持面向对象的编程思想(封装、抽象、继承、多态)3、支持运算符、函数重载。4、支持泛型编程、模版。5、支持异常处理6、支持类型检查严格二、第一个c++程序1、文件扩展名:.cpp .cc .c .cxx2、编译器:g++大多数的Linux系统需要额外安装。sudo apt-get install g+原创 2020-09-24 21:14:45 · 280 阅读 · 0 评论 -
Linux操作系统之线程
一、基本概念1、线程就是进程的进程路线,它是进程内部的控制序列,或者说它是进程的一部分(进程是一个资源单位,线程是的一部分负责真正的执行)。2、线程是轻量级的,没有自己独立的代码段、数据段、bss段、堆、环境变量、命令行参数、文件描述符、信号处理函数、当前目录等资源。3、线程有自己独立的栈内存、线程ID、错误码、信号掩码等。4、一个进程中可以包含多个线程(多个执行路线),但至少有一个,这个线程要主线程,//默认情况下主线程结束其它线程会跟着一起结束。5、ps -T -p 或者使用htop命令查看原创 2020-09-24 21:01:31 · 143 阅读 · 0 评论 -
Linux操作系统之网络编程(套接字)select与epoll的区别。
一、套接字基本特点:socket是一种接口技术,被抽象成一个文件操作,可以让进程之间通信,也可以让不同计算机的进程通信(网络)。int socket(int domain, int type, int protocol);功能:创建套接字domain:AF_UNIX/AF_LOCAL 本地通信,进程间通信AF_INET 基于IPv4地址通信AF_INET6 基于IPv6地址通信type:SOCK_STREAM 数据流协议SOCK_DGRAM 数据报协议protocol:特殊通信协议,一原创 2020-09-24 20:54:55 · 218 阅读 · 0 评论 -
Linux进程间通信、简单通信、传统通信、XSI、网络通信)
基本概念:什么是进程间通信:是指两个或多个进程之间交互数据的过程,因为进程之间是相互独立,为了协同工作必须交互数据。进程间通信的分类:简单的进程间通信:信号、文件、环境变量、命令行参数。传统的进程间通信:管道文件(有名管道、匿名管道)XSI进程间通信:共享内存、消息队列、信号量。网络进程间通信:套接字传统进程间通-管道管道是UNIX系统中最古老的进程间通信方式,古老就意味着所有系统都支持,早期的管道都是半双工,现在有些系统的管道是全双工(但要假定系统仅支持半双工)。管道是一种特殊的文件,它原创 2020-09-24 20:32:53 · 193 阅读 · 0 评论 -
Linux操作系统之进程
进程基本概念:1、进程与程序程序就是存储在磁盘上的可执行文件,程序被加载到内存中开始运行叫进程。一个程序可以被多次加载生成多个进程,进程就是处于活动状态的计算机程序。2、进程的分类进程一般分为三种类型:交互进程、批处理进程、守护进程。守护进程一般都处于活跃状态,运行在后台,由于系统在开机时通过启动脚本自动创建的。3、查看进程简单形式:ps 显示当前用户有控制终端的进程信息。列表形式:ps auxw 显示进程详细信息a 所有用户的有控制终端的进程x 无终端控制的进程u 显示进程的详细信息原创 2020-09-24 20:28:16 · 134 阅读 · 0 评论 -
Linux信号处理
基本概念1、中断当程序接收消息后中止当前正在执行的程序,转而执行其它任务,等其它任务执行完成后再返回,这种执行模式叫中断,分为硬件中断和软件中断。2、信号是一种软件中断,由操作系统发出,程序接收后会执行相应的操作。3、常见信号kill -l 显示所有信号SIGINT Ctrl+c 终止SIGQUIT Ctrl+\ 终止+coreSIGFPE 除0 终止+coreSIGSEGV 非常内存访问 终止+coreSIGKILL 终止信号 终止4原创 2020-09-24 20:21:25 · 167 阅读 · 0 评论 -
Linux环境编程文件系统下
文件同步:1、在写入数据时内存与磁盘之间也有一个缓冲区,这种机制降低了磁盘读写次数,提高了读写的效率。2、但这种机制带来的后果就是磁盘中的数据与实写入的数据不匹配,系统提供了一个函数可以让缓冲区中的数据立即写入到磁盘。void sync(void);功能:把缓冲区中的数据同步到磁盘注意:并不等到数据同步完成后才返回,而是把缓冲区的数据加入到写入队列。int fsync(int fd);功能:把指定文件的内容从缓冲区同步到磁盘注意:会等到完全定稿磁盘才返回int fdatasync(int原创 2020-09-24 20:16:17 · 82 阅读 · 0 评论 -
Linux操作系统入门到精通(入土)之文件系统上
最近在复习所以总结一下文件系统的知识点主要是一些函数的介绍首先系统调用: 1、Unix/Linux大部分系统功能都是通过系统调用实现的(open/close函数) 是C函数的形式、但是不是标准C的一部分 如何分配内存在上一个博客有讲到,大家还不清楚的可以翻一下。 总的执行时间=用户态+内核态+切换消耗(从用户态切换到内核态或者从内核态切换到用户太都会消耗时间) 2、一切皆文件: 在unix/Linux系统中,几乎所有的资源都是以文件形式提供的,操作系统把它的服务、功能、设备抽象成简原创 2020-09-10 20:01:03 · 140 阅读 · 0 评论 -
Linux操作系统从入门到精通(入土)之基础知识
今天学习了六个知识点总结一下:错误处理、环境变量、内存管理、进程映像、虚拟内存、内存API。 1、错误处理:表示错误的方式有两种:一种是通过函数返回值来表示错误,第二种是通过errno来表示。 函数返回值: 成功的时候可能返回这些:合法值、有效的非空的指针或者0 失败的时候可能返回这些:非法值、空指针(NULL、0xffffffff)或者-1。 有些函数时一直成功的:比如printf。 2、环境变量:环境变量是什么:是表示当前操作系统的资源配置,环境设置等相关信息 环境原创 2020-09-10 11:35:11 · 331 阅读 · 0 评论 -
Linux操作系统之开发环境
程序员必备技能: 一门编程语言:C语言、C++ 数据结构和算法:表 树 图 查找 排序 STL 操作系统:Linux系统 网络通信:TCP/IP (Socket、TCP、UDP、FTP、HTTP) 数据库:MySQL 界面设计:Qt课程内容介绍: 内存管理 文件管理 信号处理 进程管理 进程通信 线程管理 线程同步 网络通信UNIX系统介绍: 最早版于1970年问世于贝尔实验室,.原创 2020-09-08 15:52:58 · 575 阅读 · 0 评论 -
查找、排序算法(带程序)
算法的时间复杂度并不能代表算法的实际执行时间,有些时候看似复杂度高的速度反面快。查找算法:顺序查找:对待查找的数据没有要求,时间复杂度: O(n)二分查找:对待查找的数据必须有序,时间复杂度: O(logn)块查找:是一种数据处理的思想,不是特定的算法,当数据量过多时,可以先把数据进行分块处理,然后再进行查找,例如英语词典。哈希查找:数据 经过哈希函数 计算出数据在哈希表中的位置,然后标记,方便之后的查找,它的时间复试度最快能达到:O(1)。但是该算法有很大局限性,不适合浮点型、字符串型原创 2020-08-18 09:45:45 · 352 阅读 · 1 评论 -
线索二叉树、选择树和堆
线索二叉树:链式二叉树中有很多空指针,可以让这些指针指向它的下一个节点(前中后),这样在遍历树时可以不用递归而是使用循环,可以提高树的遍历速度。中序线过树点数据项:数:左子树右子树右子树指针标志:(真表示指向的是右子树,假表示指向的是下一个节点)选择树(了解):是一种完全二叉树,带比较的数据存储在最后一层,根节点是左右子树的其中一个,是他们的最大的或最小的,能快速找出最大值或最小值堆:是一种完全二叉树,不适合链式存储。大根堆:根节点比左右子树大小根堆:根节点比左右子树小特点:最顶层是原创 2020-08-12 23:42:43 · 215 阅读 · 0 评论 -
二叉树(有几题面试题包含在代码中)
二叉树:是一种常用的数据结构。定义:二叉树是n个有限元素的集合,由一个根和左子树以及右子树组成,是有序树。当集合为空时,又称为空二叉树。二叉树的性质:性质1:二叉树的第i层上最多有2^(i-1)个节点。每层的节点数都是2^(i-1),这种树叫满二叉树。对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。性质2:深度为h的二叉树中至多含有2^h-1个节点。性质3:若在任意一棵二叉树中,有n0原创 2020-08-12 23:32:51 · 144 阅读 · 0 评论 -
树结构
树型结构:1、树的基本概念一种表示层次关系的(一对多)数据结构有且仅有一个特定的节点,该节点没有前驱,被称为根节点。剩余的n个互不交集的子集,每个子集也都是一棵树,被称为根节点的子树。注意:树型结构具有递归性(树中有树)2、树的表示方法:倒悬树、嵌套法、凹凸法。3、!!树的专业术语:节点:组成树的基础元素,同时他也是一棵树。节点的度:该节点子树的数量。树的度(密度):树中节点的数量。叶子的节点:节点的度为零的节点。双亲和孩子:节点的子树被称为孩子节点,该节点就是他们的双亲。兄弟:具原创 2020-08-12 23:05:18 · 195 阅读 · 0 评论 -
通用链表
通用链表:顾名思义就是无论是什么类型都可以使用主要是定义指针,用户自己调用时需要编写函数,以及强转指针类型。#include <stdio.h>#include <string.h>#include <stdlib.h>#include <stdbool.h>// 定义比较函数指针typedef int (*Compar)(const void*,const void*);// 链表节点typedef struct Node{ vo原创 2020-08-08 15:14:41 · 204 阅读 · 0 评论 -
Linux内核链表
Linux内核通用链表链表的节点不能包含万物,那么就让万物包含节点。仿照linux内核链表改写的链表废话不多说,上代码:#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#define offset(type,mem) ((int)&((type*)0)->mem)#define node_to_obj(node,type,mem) ((type*)((void*)node原创 2020-08-08 14:58:37 · 127 阅读 · 0 评论 -
封装链表和双向链表
封装链表:尾添加的效率低,非法下标的判断也非常低。1、单链表节点:数据域指针域数据项:头指针尾指针节点数量2、静态链表节点:数据域游标静态链表的节点存储在连续的内存,通过游戏来访问下一个节点。这种链表在插入删除时只需要修改游标的值,而不用申请、释放内存达到链式结构的效果。但是也牺牲的随机访问的功能,是给没有指针的编译实现的一种单链表。3、循环链表链表的最后一个节点的next不再指向NULL,面是指向头节点,这种链表叫单向循环链表,简称循环链表,它的好处理就是可以通过任何节原创 2020-08-08 14:50:03 · 146 阅读 · 0 评论 -
数据结构学习笔记5之特殊表结构(队列)
队列:一个端口进,另一个端口出,先进先出顺序队列:由一维数组+队头位置front+队尾位置rear组成,入队时rear+1,出队时front+1,为了让队列能反复使用,我们要把一维数组相像成一个环,因此rear和front加1后要用队列的容量求余。rear = rear+1 % calfront = frone+1 % cal 如何判断队列为空:front == rear 如何判断队列为满:front == rear+1 代价就是空一个位原创 2020-08-08 14:35:00 · 173 阅读 · 0 评论 -
数据结构学习笔记4之特殊的表结构(栈)
栈:只有一个进去出口的表结构,先进后出顺序栈:数据域:存储元素的内存首地址栈的容量栈顶位置运算:创建、销毁、入栈、出栈、栈满、栈空、栈顶 链式栈: 数据域: 栈顶 节点数量 运算: 创建、销毁、入栈、出栈、栈空、栈顶 栈的应用: 1、函数的调用(栈内存) 2、生产者与消费者模型(栈作为仓库) 3、表达式解决(原创 2020-08-08 14:31:21 · 123 阅读 · 0 评论 -
数据结构学习笔记之链表
链式表:元素的数据项:数据域:可以是各种类型的若干个数据项指针域:指向下一元素由若干个元素通过指针域连接在一起形成链式表。不带头节点:第一个元素的数据域存储的就是有效的数据。添加删除时可以会修改头节点指针,参数需要使用二维指针。同时需要获取到上一个节点的指针,而头节点没有上一个节点,因此需要额外处理。带头节点:第一个元素不使用,仅仅是为了用它来指向下一元素。#include <stdio.h>#include <stdlib.h>#include <std原创 2020-08-08 14:23:25 · 131 阅读 · 0 评论 -
数据结构学习笔记之顺序表
进入主题:表结构之顺序表:定义:typedef struct Array{ TYPE* ptr; 存储元素的内存首地址size_t cal; // 表的容量size_t cnt; // 元素的数量}Array;// 创建Array* create_array(size_t size){ // 分配表结构内存 Array* arr = malloc(sizeof(Array)); // 分配存储元素的内存 arr->ptr = malloc(sizeof(TYPE)*si原创 2020-08-08 14:14:26 · 127 阅读 · 0 评论 -
数据结构学习笔记之初体验
一、数据结构初体验1、数据结构的起源:1968年,美国的高纳德教授开设了一门基本算法的课程,开创了数据结构的先河。那么什么是数据结构呢?数据结构就是数据之间的关系和操作,而并非是计算方法。经典:数据结构+算法=程序,,,,说这句话的老哥 沃思凭借这个论点,获得了图灵奖。2、数据结构的基本概念:数据:所有能够输入到计算机中去描述事物的符号。数据项:有独立含义的数据最小单位,也叫域数据元素:数据的基本单位也叫节点、记录。数据结构:数据元素和数据关系的集合。算法数据结构所具备的功能,解决特定原创 2020-08-08 11:49:17 · 127 阅读 · 0 评论 -
C语言简单小游戏--五子棋(vim编译器)C语言进阶
五子棋:需要的数据:1、定义棋盘数组2、定义变量用于记录棋子位置3、定义角色变量业务逻辑:是否需要对数据进行初始化for(; ; ){1、清理屏幕,显示棋盘2、落子坐标要合法,原位置不能有棋子3、检查是否形成五子 4、切换角色第一种方式:不用光标键盘输入(这个方法有点不方便但是简单易理解)#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#include &原创 2020-07-18 15:02:40 · 351 阅读 · 0 评论 -
C语言简单小游戏--走迷宫(Vim编译器)有趣好玩
走迷宫:1、定义二维字符数组作为迷宫2、定义变量记录老鼠的位置3、获取游戏开始时间3、进入循环1、清理屏幕,使用system调用系统命令。2、显示迷宫(遍历二维字符数组)3、检查是否到达出口获取游戏结束时间,计算出走出迷宫用了多少秒。4、获取方向键并处理判断接下来要走的位置是否是路,1、把旧位置赋值为空格2、把新位置赋值为老鼠3、把记录老鼠位置的变量改变。注意:time(NULL)获取自 1970-1-1 00:00:00 到现在过了多少秒。获取方向键使用getch.h头文件原创 2020-07-13 20:21:00 · 608 阅读 · 0 评论 -
C语言初学经典程序(Vim编译器):
练习1:输入一个整数,判断是奇数还是偶数。#include <stdio.h> int main() { int a; printf("请输入一个整数:"); scanf("%d",&a); if(a%2==0) { printf("这个数是偶数"); } else { printf("这个数是奇数"); .原创 2020-07-11 15:34:00 · 277 阅读 · 0 评论 -
Vim文本编辑器(初学看都是简单操作和调试)
Vim文本编辑器一、vim文件编辑器介绍vim是终端(可以在远程登录时使用)下可以使用的文本编辑器。它采用纯键盘进行操作,支持扩展(安装插件)、二次开发,是一款成长型文本编辑器。一般UNIX/Linux系统都会自带vi,而vim是它的增强版。需要安装才能使用,ubuntu系统:sudo apt-get install vim。二、vim的基本使用方法1、使用vim打开文件:vim file.c 文件存在则打开,不存在则创建。2、此时不能编辑文件,按i键则可以输入内容。3、编辑完成后按Esc原创 2020-07-07 20:00:28 · 437 阅读 · 0 评论