C++
文章平均质量分 53
韩嘚儿嘚儿
一个什么都不会的社畜
展开
-
c++智能指针简单实现
从上到下依次是auto_ptr unique_ptr 以及shared_ptr实现以及简单的调用。用作记录//auto_ptr.h#ifndef _AUTOPTR_#define _ATUTOPTR#include <iostream>#include <string>template<typename T>class Smart_auto{public: explicit Smart_auto(T* _data = nullptr) :dat原创 2022-04-26 20:42:31 · 1379 阅读 · 0 评论 -
c++多线程学习笔记二——线程池的实现
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、共享数据二、使用步骤1.引入库2.读入数据总结前言一、共享数据一个进程可以包含多个线程,线程之间是共享数据,对于共享数据,同时读取出现的问题不大,但是当线程同时更改共享数据时可能会出现崩溃的情况。因此我们需要在共享数据上加入互斥量二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as plt原创 2022-02-16 15:11:09 · 700 阅读 · 0 评论 -
c++多线程学习笔记一——多线程相关概念及简单的示例函数
进程:可以简单理解成一个可执行程序线程:一个进程可以包含多个线程,一定有一个主线程。进程与线程之间的区别与联系:1)进程是最小的资源分配单位,线程是最小的程序执行单位,每新建立一个进程,系统需要为其分配相应的地址空间,而线程共享数据段,是同一个地址空间,CPU切换一个线程要比切换一个进程花费小很多。2)进程之间的通信不是很方便,比如经历SOCKET之类的网络编程技术,而线程之间因为是共享数据段所以线程之间的通信很方便很多。3)多进程程序具有健壮性,具有一定的稳定性,多线程程序只要有一个程序崩溃原创 2022-02-13 10:49:03 · 665 阅读 · 0 评论 -
C++实现快速排序 希尔排序 插入排序 冒泡排序 选择排序 归并排序
直接上代码,有问题私聊#include<iostream>#include <vector>#include<time.h>using namespace std;//输出排序好函数的值void printvalue(vector<int>nums,int size){ for (int value=0;value<size;value++) cout << nums[value] << endl;}//工原创 2021-09-13 21:55:47 · 269 阅读 · 2 评论 -
数据结构二——栈与队列的简单介绍
栈与队列都是一种线性表存储结构 各有各的数据特点,其中 栈的特点是先进后出,我们通常把允许插入和删除元素的一端称为栈顶,将另一端称为栈尾。栈的结构特点决定栈可以做很多事情。比如我们在日常生活中浏览器通常具有前一步后一步的步骤,这种结构就是用栈实现的队列也是一种数据结构 它的特点是允许在一端插入元素,在另一端删除元素在允许插入元素的一端称为队尾,在另一端删除元素称为队头。下面简单用代码增强相关知识点的记忆。# include <iostream># include <sta原创 2021-07-08 11:20:37 · 160 阅读 · 0 评论 -
数据结构一——顺序结构以及单链表的创建,添加,以及删除
学习创建单链表时,网上教程感觉大多没有释放内存,我认为这是一个bug,以下是根据自己的想法写的链表创建以及添加删除结点。//第一章节主要了解了顺序存储结构//所谓的顺序存储结构存储数据的内存空间是连续的,由于是连续的存储空间//所以在存储和读取比较方便,时间复杂度是o(1),但是在添加和删除元素会比较//麻烦,以添加为例,如果恰好添加的元素在最后一位,那么其他元素则不需要移动//如果添加的元素在第一位,那么则需要移动n-1次。所以对于顺序存储结构来说,//增加和删除元素时间复杂度是o(n)。顺序原创 2021-07-03 17:48:49 · 187 阅读 · 0 评论 -
VS2019+FFmpeg C++实现 FFmpeg将YUV视频编码为H264
最近在做视频编解码相关知识,我主要的参考文章是雷神的编码教程,里面讲的很详细具体博客参考雷神参考相关结构体内容解读解读雷神代码详细第三个链接是我认为解读比较详细的文章,另外,因为我本人这次要求的传输数据是mat类型,所以还涉及到mat 类型与AVFrame的互相转换。网上大多版本不可用,以下是可以使用的版本。cv::Mat avframeToCvmat(const AVFrame* frame){ int width = frame->width; int height = frame原创 2021-06-09 11:36:09 · 1231 阅读 · 2 评论 -
c语言多线程相关基础知识
最近在学习C语言多线程的相关基础知识,特此记录。课程连接多线程呢个课程多线程创建相关函数pthread_t id //创建线程????id 。pthread_create(&id,null,func,arg4);//创建一个多线程,//第一个参数是ID,//第二个参数是线程的属性,通常使用默认值 //第三个参数是线程函数//第四个参数是将传入线程函数的参数,(如果想要传入多个参数,可以传入一个类)pthread_exit()//线程退出函数,可以返回数据通常与 pthread_原创 2021-05-26 17:47:14 · 296 阅读 · 0 评论 -
利用sift特征点判断相机是否发生移动。
具体解决的场景是 当你的相机在标定后如果不小心被触碰后,摄像机前后拍摄的图像来检测相机是否发生移动,从而准确定位到是哪个相机方便后续进行调整。具体的程序也很简单,具体思路为利用sift寻找两张图像的匹配特征点——去除误匹配点——利用匹配点的欧式距离由小到大排序——以10.5为阈值点>10.5则认为有轻微移动(10.5是自己粗略估计值)具体程序如下#include <iostream>#include<algorithm>#include <opencv2/ope原创 2021-05-25 17:43:15 · 1005 阅读 · 0 评论 -
c++学习笔记二十二——捕获处理异常
c++中有一些的异常处理是不可避免的,c++中 throw try catch 是三个专门处理异常的函数。我将用自己的语言简单的介绍如何使用这三个函数。throw //抛出异常,后面可以很整型 浮点型等等 该函数的抛出的异常可被catch捕捉到try{......}』 //里面执行你认为可能出现异常的语句,当出现异常以后,抛出异常catch(int a){} //捕获异常,当执行前面语句抛出的类型与()内类型一致则执行{}内语句以上要注意的是1)如果 try 语句内无异常则不执行catch原创 2021-05-04 17:55:41 · 236 阅读 · 0 评论 -
C++学习笔记二十一——函数模板与类模板
针对函数模板与类模板我想摒弃课本固有的理论知识定义,用我自己的话来见简单的叙述作用以及概念。函数模板有什么用?C++有很多基本的数据类型,比如 int ,double ,float…等等。我们在定义一个函数时会定义一个返回类型,表示函数返回值,但是这种返回值有一个坏处,就是只能返回单一的数据类型。如果两个参数基本类型不一致,但是想执行的函数体是一致这样我们就需要写两个函数,比如对于float 和int 基本类型来说,我们进行取绝对值的操作我们就需要写两个形参不同的函数int abs (int x){原创 2021-03-15 21:59:04 · 123 阅读 · 0 评论 -
c++学习笔记二十——派生类的构造函数,复制构造函数和析构函数
在讲派生类的构造和析构函数时候我们先介绍类的兼容性。类的兼容性:类的兼容性是指在需要基类对象的任何地方都可以使用派生类来替代,通过继承,派生类得到了除了基类构造函数,复制函数中的所有成员。这样公有派生类实际具备了基类所有的功能,凡是基类所能解决的问题,公有派生类都可以解决。类的兼容性规则中所指代的情况有以下几种1)派生类的对象可以隐含转化为基类对象2)派生类对象可以初始化基类的应用3)派生类的指针可以初始化基类的指针在替代之后,派生类对象可以作为基类对象使用,但只能使用从基类继承的成员。派生类原创 2021-03-11 17:45:52 · 3320 阅读 · 0 评论 -
c++学习笔记十九——类的继承与派生
什么是类的派生与继承?面对对象的程序设计中提供了类的继承机制,允许程序员在保持原有类特性的基础上,进行更具体,更详细的类的定义。已原有类为基础产生新的类,我们就说新的类继承了原有类的特征,也可以说从原有类派生出新类。派生类的定义格式class 派生类名:继承方式 基类名1 ,继承方式 基类名2,继承方式 基类名3....{派生类成员声明;}基类名:已有类的名称派生类名:是是继承原有特性新的类名,一个派生类可以继承多个基类,这种情况称为多继承,一个派生类只有一个继承的基类称为单继承。继承方原创 2021-03-08 11:42:01 · 311 阅读 · 0 评论 -
c++学习笔记十八——指针与引用
指针与引用指针以及引用有很多相似的地方,使用他们作为形参,都可以修改主调函数变量从而达到值的双向传递。都可以避免复制值的发生从而减少调用数据的开销。引用之前在介绍引用时将其介绍为其他变量的别名,但是对一个确定的引用来说,他可能在不同时刻表示不同变量的别名,因此,要在内存中为引用分贝空间来标识它所引用的变量,在程序运行时,变量只能依靠地址来区别,因此,只有通过储存被引用变量的地址,在运行时才能准确定位被引用的变量。在运行时引用所占的内存空间中。引用本身所占的内存空间中,储存的就是被引用变量的地址,这与指原创 2021-03-08 08:38:02 · 118 阅读 · 0 评论 -
c++学习笔记十七——字符串
字符串是由一对双引号引起来的字符。如“abcd”,“hanruidashuaibi”,等等著如此类都是字符串常量,他们按照字符串中顺序按顺序储存,每个字符占用一个字节,并在结尾添加“\0”作为标记。一个字符串常量表示一个数组的首地址,因此可以用一个字符指针指向字符串。...原创 2021-03-05 09:33:21 · 135 阅读 · 1 评论 -
c++学习笔记十六——指针及深复制浅复制
什么是指针?我们前面学习过一些基本的数据类型,如int,float,char…等等,其中int变量 存放整型数据,float类型变量存放浮点型数据,char存放字符型数据。而指针类型变量存放地址类型数据。如何理解“地址”?计算机的存储器被划分为一各个储存单元,储存单元按照一定的规则编号,这个编号就是储存单元的地址。地址编码的基本单元是字节,一个字节由八位二进制数组成,也就是说每一个字节是一个基本的内存单元,有一个地址。储存结构简图指针变量声明指针变量用来存放内存单元地址,通过变量名访问变量属于原创 2021-03-03 08:43:20 · 7924 阅读 · 0 评论 -
C++学习笔记十五——数组
什么是数组?数组是同一类型的集合体,用来储存和处理大量同类型的数据结构。如何使用数组?在使用数组之前,我们首先要进行类型的声明应该首先确定以下问题:1:数组的名字2:数组的类型3:数组的的大小数组的声明格式为数据类型 标识符 [常量表达式1][常量表达式2]数组中的数据类型包括 整数型 浮点型等甚至可以为字定义数据类型,比如类。而常量表达式为数组的界,这里需要注意的是,数组是从下标0开始,到N-1截止,例如 int a[10],包括的范围就是a[0]~a[9]一共10个元素,a[2]原创 2021-03-01 08:27:39 · 427 阅读 · 2 评论 -
c++学习笔记十四——常对象,编译的杂谈笔记
常对像是这样的对象,定义必须进行初始化,且在生存期内无法进行更新。形式 const 类型名 对象名我们知道一个大型的工程可能有包含多个头文件,举例子如下//main.cpp# include <test1.h># include <test2.h>................//test1.h# include <rui.h>..........//test2.h# include <rui.h>...........//ru原创 2021-02-26 17:15:07 · 74 阅读 · 0 评论 -
c++学习笔记十三——数据作用域以及生存期
数据作用域就是一个数据有效的区域数据作用域数据有效的区域,数据作用域包括以下几种函数作用域:说简单一些就是函数的形参,函数在声明中 作用域只限于括号范围内,如有以下代码void show(int x);其中在声明中x的作用域仅限于括号内,由于编译器只检查参数类型,而不检查参数的名称,所以可以在声明中不定义名称,但是为了读起来方便理解最好还是定义名字。局部作用域:函数形参列表中的定义域,从函数形参开始一直到函数体结束,函数体内声明的变量,其作用域从声明开始,一直到声明所在块结束的大括号为止,其原创 2021-01-19 16:35:31 · 455 阅读 · 0 评论 -
c++学习笔记十二——结构体 联合体 枚举类
结构体其实是一种特殊的类。是c++继承c语言得来的,但是与类不同有以下两点1.关键字为 struct,类的关键字为class.2.其默认属性为public,类的默认属性为private其他与c++中类的使用方法相同下面举一个例子说明结构体的使用#include <iostream>using namespace std;struct test {private: int i; int j;public: test(int i1, int j1) :i(i1), j(j1)原创 2021-01-15 17:57:27 · 264 阅读 · 0 评论 -
C++学习笔记十一———组合类及前向引用声明的使用
对于类,前面的文章分别简单讲述了什么是类?以及类的构造函数,类的复制构造函数的作用。下面将要结婚扫原创 2021-01-14 09:59:09 · 412 阅读 · 0 评论 -
C++学习笔记十——类的复制构造函数与析构函数
上一个章节介绍了类的构造函数,我们可以知道构造函数的作用是将类的成员初始化,那么复制构造函数是用来干嘛的呢?复制构造函数也可以简单的理解为进行初始化的函数,主要应用在以下三种场合中1.在已经有一个初始化的类,想要用这个类初始化另一个类,简单理解为给新的类进行赋值。2.函数调用时,若函数的形参为类型为类的对象,在进行实参形参的相互转换的时候,会调用复制构造函数。3.类的对象作为返回值时,返回时会调用复制构造函数。复制构造函数的基本形式类名 (const 类名 &p);//复制构造函数的形式原创 2021-01-13 22:23:39 · 361 阅读 · 0 评论 -
C++学习笔记九——类的定义与初始化
C++中,可以使用类来定义自己的数据类型,那么如和理解自己的数据类型?比如我们常见的如 int ,float,char…等等诸如此类,这都是一种数据类型,那么比如我自己想定义一个叫 clock 的数据类型,里面包含小时,分钟,秒,并可以显示出来,那么我们就可以使用类来定义自己的数据类型 clock。定义如下class clock {public: void setime(int hour, int minute, int second); void showtime(); clock(int n原创 2021-01-12 11:53:32 · 1520 阅读 · 0 评论 -
C++学习笔记八——顺序容器vector list deque
一 什么是顺序容器?顺序容器内的元素按照其位置储存和访问。除顺序容器外,标准库还定义了几种关联容器,其元素按键(key)排序。例如 标准库vector 类型,这就是一种顺序容器,它将单一的类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素,这就是顺序容器。标准库定义了三种顺序容器的类型: vector list 和 deque。以下为几种顺序容器类型vector // 支持快速随机访问list //支持快速删除插入deque //双端队列1.1 顺序容器定义在使用各种容器,必须先包原创 2020-09-26 22:26:38 · 431 阅读 · 1 评论 -
C++学习笔记七——使用ofstream ifstream进行简单得读写txt文件
C++的输入输出由标准库提供,标准库定义了一族类型,支持对文件和控制窗口的等设备的读写(IO)。还定义了其他一些类型,使得string 对象能够像文件一样操作,从而使我们无需IO就能实现字符之间的转换。istream //输入流类型,提供输入操作ostream //输出流类型,提供输出操作>> //用于从istream对象中读入输入<< //用于把输出写到ostreamIO类型在三个独立头文件定义:iostream 定义读写控制窗口类型fstream 定义读写原创 2020-09-26 15:24:13 · 4501 阅读 · 0 评论 -
C++学习笔记六——指向函数的指针以及构造函数
首先要说明的类成员之一——构造函数,构造函数的作用是初始化类成员。,构造函数时特殊的成员函数,与其他的成员函数不同,构造函数和类同名,而且没有返回类型,与其他成员函数相同的是,构造函数也有形参表(可能为空)和函数体。一个类可以有多个构造函数,每个构造函数必须由于其他构造函数不同数目或类型的形参。下面举一个例子说明://首先定义一个类struct hanrui{public://可以不写,因为struct默认为publicint test;//定义一个teststring name;};我原创 2020-09-24 12:01:28 · 1249 阅读 · 0 评论 -
自增自减操作符简单说明
总是忘记++i,以及i++的使用方式,下面以一个简单的小程序说明 int i=0,j=0; j=++i; //j=1,i=1 j=i++; //j=1,i=2二者区别在于自增自减符号的前置和后置,”++“前置说明在未使用i的值之前加1,”++“后置说明在i值使用之后进行自增自减。只有在必要时才会采用后置...原创 2020-09-21 17:23:09 · 139 阅读 · 0 评论 -
c++学习笔记五——标准库类型vector与string
C++中除了像int ,float等一些基本类型外,C++还定义了内容丰富的的抽象数据类型标准库。其中最重要的标准库类型是string和vector,他们分别定义了大小可变的字符串和集合。1标准库string类型1.1 string 对象的定义以及初始化//构造函数是一个特殊的成员函数,定义如何初始化该类型的对象string s1 // 默认构造函数,s1为空串string s2(s1) //将s2初始化s1的副本string s3("value") //将s3初始化一个字符串字面值的副本st原创 2020-09-21 09:22:06 · 532 阅读 · 0 评论 -
C++ 学习笔记四——基类和派生类的讲解与实例应用
在认识C++基本语句结构的基础上,了解类成员,并使用类成员编写一个简单的程序。主要用到以下知识点;1.类成员使用及派生类的使用2.头文件的使用。我们通过类来定义自己的数据结构,类定义以关键字class或struct开始(class和struct关键字的差别在于默认访问级别,默认情况下,struct的成员为public,class成员private),其后是该类的名字标识符。类体位于花括号里面,花括号后面必须要跟一个分号。类体可以为空,类体定义组成了该类型的数据和操作,这些操作和数据是类的一部分,也称原创 2020-09-20 19:13:49 · 1876 阅读 · 0 评论