C++学习
文章平均质量分 52
灿烂的人生
此时的我开始感到不安,oo唔oo!只想更加的充实自己,走向辉煌
展开
-
linux有名管道简单聊天实现
1.习惯用命令创建两个管道 mkfifo fifo1 fifo2在这里插入图片描述用户A用户B细心的伙伴们肯定发现,两者代码只是顺序不同,代码其实一模一样,所以使用有名管道只需要记住调用的管道读写顺序即可。...原创 2022-07-01 10:15:13 · 216 阅读 · 0 评论 -
linux c——dup( )和dup2( )函数详解
dup用来复制参数oldfd所指的文件描述符。当复制成功是,返回最小的尚未被使用过的文件描述符(用语言描述可能不太清晰,以下面程序为例)#include<stdio.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>/*已知0,1,2分别代表标准输入,标准输出,标准错误三个已经被系统占用。*/int main(int argc, char* argv[]){ int f原创 2022-03-15 10:05:49 · 1111 阅读 · 0 评论 -
结构体内存对齐sizeof分析
1 第一个元素偏移量为0;2 从第二个元素开始计算偏移量;3 每个成员变量的起始地址要为自身字节数的整数倍;4 结构体的总大小为结构体最宽基本类型成员大小的整数倍举一些常见的例子加深理解例一#pragma pack(show)//默认对齐方式为min(实际字计数,8);struct A{ int a;//占四个字节 0~3 char b;//占一个字节 4~7 (由于0-4为5个字节,不满足第4个条件,所以b要补3个字节,实际就是4+1+3=8)}反过来分析一样struct B{原创 2022-01-26 11:27:20 · 249 阅读 · 0 评论 -
数组指针和指针数组的区别(读后感)
此文章参考自链接地址(反正看了之后我是明白了,所以就摘抄记录一下)对指针数组和数组指针的概念,相信很多C程序员都会混淆。下面通过两个简单的语句来分析一下二者之间的区别,示例代码如下所示:int *p1[5];//指针数组int (*p2)[5];//数组指针首先,对于语句“intp1[5]”,因为“[]”的优先级要比“”要高,所以 p1 先与“[]”结合,构成一个数组的定义,数组名为 p1,而“int*”修饰的是数组的内容,即数组的每个元素。也就是说,该数组包含 5 个指向 int 类型数据的指针转载 2022-01-06 16:18:37 · 69 阅读 · 0 评论 -
把字符串按分隔符分开
vector<string>split(const string& s,char delimiter){//这里的delimiter代表着符号,例如‘,’‘:’等等 vector<string>tokens; string token; istringstream tokenStream(s); while(getline(tokenStream,token,delimiter)){ ...原创 2020-11-14 16:04:47 · 1280 阅读 · 0 评论 -
c++异常捕捉语句
在c++语言中,为了处理异常,提供了try、catch、throw等关键字,其中try存放的是可能出现异常的语句,catch里包含的是处理异常的方法,而throw关键词是手动触发异常,下面举个简单的例子了解一下具体的使用效果#include<iostream>#include<string>using namespace std;class CDivZeroException{public: char ExceptionMsg[128]; CDivZeroExcepti原创 2020-11-11 13:09:46 · 217 阅读 · 0 评论 -
递归简单案例学习-盘子放苹果
题目描述:把M个同样的苹果放在N个同样的盘子里,允许有空盘子空着不放,问公有多少种不同的放法(注意,5,1,1和1,1,5是同一种放法)输入格式 第一行是测试数据的数目t(0<=t<=20),以下每行包括两个整数M和N,以空格分开。1<=M,N<=10;输出格式 对输入的每组数据M和N,用一行输出相应的K#include<bits/stdc++.h>using namespace std;int dfs(int m,int n){ if(m<=1||n原创 2020-09-07 22:19:05 · 185 阅读 · 0 评论 -
单调栈、队列记忆
输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6 7 3 1 3 [-1 -3 5] 3 6 7 5 1 3 -1 [-3 5 3] 6原创 2020-08-14 13:40:51 · 96 阅读 · 0 评论 -
unordered_map自定义排序
因为unordered_map本身不能使用sort排序(具体因为啥不能,自己搜索哈),因此可以使用以下方法进行自定义排序。(主要是为了自己记忆,老忘记)#include<iostream>#include<algorithm>#include<vector>#include<unordered_map>using namespace std;int main() { unordered_map<int, int>m; vector&原创 2020-07-30 17:21:53 · 6659 阅读 · 0 评论 -
企业链表
企业链表即传统链表的改造,把每个链表的结点指针相连接在一起LinkList.h头文件定义一些链表常用的API#ifndef LINKLIST_H#define LINKLIST_Htypedef struct LINKNODE{ struct LINKNODE* next;}LinkNode;typedef struct LINKLIST{ LinkNode head; ...原创 2020-04-06 23:43:19 · 280 阅读 · 3 评论 -
队列的顺序存储
SeqQueue.h头文件 定义队列一些常用API函数#ifndef SEQQUEUE_H#define SEQQUEUE_H#define MAX_SIZE 1024typedef struct SEQQUEUE{ void* data[MAX_SIZE]; int size;}SeqQueue;//初始化SeqQueue* Init_SeqQueue();//入队vo...原创 2020-03-28 01:24:51 · 86 阅读 · 0 评论 -
链式栈结构的入栈,出栈,返回栈顶元素,清空栈等等
只把学习的代码与各位分享一下:定义头文件LinkStack.h#ifndef LINKSTACK_H#define LINKSTACK_H//链式结点typedef struct LINKNODE{ struct LINKNODE* next;}LinkNode;//链式栈typedef struct LINKSTACK{ LinkNode head; int size;...原创 2020-03-27 03:06:02 · 1884 阅读 · 1 评论 -
二叉树的#号创建
代码:#include<stdio.h>#include<stdlib.h>#include<string>#include<iostream>//准备数据struct BiNode{ char ch; BiNode* lchild,*rchild;};//递归遍历void Recusion(BiNode* root){ ...原创 2020-03-24 22:40:33 · 242 阅读 · 0 评论 -
C++示例(评委给学生打分)
题目要求:要求有五名学生,共计十个评委给每位学生打分,积分规则为,去除打分中的最高分和最低分,其余分数求平均,然后按分数高低排名。#include<iostream>#include<vector>#include<string>#include<deque>#include<algorithm>using namespace...原创 2020-03-15 20:29:46 · 1656 阅读 · 0 评论 -
矩阵相乘
对于给定的m X n矩阵A和n X k矩阵B,得到矩阵C(m X k)其乘积的矩阵可以用以下代码表示:void MatrixMul(double *A,double *B,int m,int n,int k,double *C){ int i,j,l,u; for(i=0;i<m;i++) { for(j=0;j<k;j++) { u=i*k+j;//矩...原创 2020-03-08 23:00:51 · 132 阅读 · 0 评论 -
小甲鱼-虚继承
虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在子类中存在多份拷贝。这将存在两个问题:其一,浪费存储空间;第二,存在二义性问题,通常可以将派生类对象的地址赋值给基类对象,实现的具体方式是,将基类指针指向继承类(继承类有基类的拷贝)中的基类对象的地址,但是多重继承可能存在一个基类的多份拷贝,这就出现了二义性。虚继承主要解决多继承中出现变量访问不明确的问题;在一般的多重...原创 2020-03-07 02:12:03 · 274 阅读 · 0 评论 -
任意随机数以及正态分布随机数的产生
#include<stdio.h>double Rand01(double *r){ double base,u,v,p,temp1,temp2,temp3; base=256.0; u=999.0; v=199.0; temp1=u*(*r)+v; temp2=(int)(temp1/base); temp3=temp1-temp2*base; *r=temp...原创 2020-03-03 22:51:41 · 980 阅读 · 0 评论 -
运算符的重载
运算符+号重载例子:计算复数相加,当运算符重载之后,在调用该运算符时自动调用该函数。(这句话理解了,代码就容易懂了)#include <iostream>using namespace std;class F{public: int operator() (int a, int b) { return a*a + b*b; }}; class F2{pu...原创 2020-03-03 00:09:05 · 104 阅读 · 2 评论 -
多项式计算
一维多项式求值:一个通用的计算式多项式的值的算法可以采用递推的方式。首先可以将多项式变形为如下等价形式:P(x)=(…((a1x+a2)x+c)x+d)x+…an-1)x+an依照这个思路来编写一维多项式求解过程:double polynomiallD(double *a,int n,double x)//n为多项式的系数,x为指定的变量值,a存放的是多项式的n个系数{ int i;...原创 2020-03-01 23:35:31 · 3144 阅读 · 0 评论 -
查找算法:折半查找
折半查找(Binary Search)又称为二分查找,要求数据序列呈线性结构,也就是经过排序的。对于没有排序算法进行预排序,然后执行折半查找算法。首先需要设三个变量low、mid、high,分别保存数组元素的开始,中间和末尾的序号。根据以上算法步骤,可以编写相应的折半查找算法,示例代码如下:int SearchFun(int *a,int n,int target){ int low...原创 2020-02-29 23:18:45 · 482 阅读 · 0 评论 -
查找算法:顺序查找
顺序查找的算法的程序代码很简单,在c语言中只需要编写一个循环,将数组中各元素依次与待查找的目标数进行比较即可。顺序查找算法的示例代码如下:#include<stdio.h>#include<stdlib.h>#include<time.h>#define N 15int SearchFun(int *a,int n,int target)//a为序列数...原创 2020-02-28 19:41:10 · 514 阅读 · 0 评论 -
虚函数的应用
使用说明:1.可在任何方法上添加virtual,例:virtual void play();2.继承性:一旦基类中为虚函数,子类将不会为非虚函数3.优缺性:声明虚方法除了使程序慢一点点以外,没有任何缺点因为当我们使用基类的引用或指针调用基类中定义的某个函数时,我们并不知道该函数真正的对象是什么类型(属于哪个类),因为它可能是一个基类的对象,也可能是一个子类的对象下面对一个例子进行举例:...原创 2020-02-28 00:51:42 · 521 阅读 · 0 评论 -
字符串数组的快速排序
#include<include.h>#include<stdlib.h>#include<time.h>#define N 5void QuickSort(char* [],int left,int right){ int l,r; char *f,*t; l=left; r=right; f=[(left+right)/2];//取中值为...原创 2020-02-26 13:46:20 · 442 阅读 · 0 评论 -
反序排列
反序排列就是从大到小的顺序对数组进行排序,反序排列实现起来十分方便,只需对一般排序算法稍加修改即可。以插入算法为例,按从大到小的反序插入排序算法进行排序。代码如下:void InsertionSort(int* a,int len){ int i,j,t,h; for(i=1;i<len;i++) { t=a[i];//待插入的数据 j=i-1;//准备插入的位置 w...原创 2020-02-24 19:19:01 · 1090 阅读 · 0 评论 -
堆排序法
就是不断维护一个大根堆,让每个结点都不小于其子节点,此时根节点必然是所有数字中最大的。然后,我们只需要将第一个与最后一个数字交换位置,就可将最大的数移动到数组的最后,然后再将数组前n-1个元素继续维护成大根堆,再将根节点与第n-1个元素交换位置,此时第n-1与第n个元素都已经按照升序排好了。我们只需要不断重复上述步骤,直到所有元素按照升序排好。void adjust(int a[],int i,...原创 2020-02-20 20:20:02 · 134 阅读 · 0 评论 -
C++华氏温度和摄氏温度的转换
#include<iostream>using namespace std;void convertTemperture(double tempIn,char typeIn);int main(){ double tempIn; char typeIn; cout<<"请以[xx.x C]或[xx.x F]的形式输入温度:"; cin>>te...原创 2020-02-19 01:02:04 · 7804 阅读 · 0 评论 -
C++快速排序
#include<iostream>using namespace std;void quickSort(int a[],int,int);int main(){ int array[]={34,65,12,43,67,5,78,10,3,70},k; int len=sizeof(array)/sizeof(int); cout<<"The orginal...原创 2020-02-18 22:57:57 · 96 阅读 · 0 评论 -
Shell排序算法
Shell排序算法严格来说是基于插入思想,又称为希尔排序或缩小增量排序。Shell排序算法的排序流程如下:(1)将有n个元素的数组分成n/2个数字序列,第1个数据和第n/2+1个数据为一对,等等,以此类推。(2)一次循环使每一个序列对排好顺序。(3)变为n/4个序列,再次排序。(4)不断重复上述过程,随之序列减少直至最后变为1个,完成整个排序。void ShellSort(int *a,...原创 2020-02-18 21:46:23 · 910 阅读 · 0 评论 -
选择排序算法and插入排序法
选择排序通过选择和交换来实现排序,其排序基本流程如下:(1)首先从原始数组中选择最小的数据,将其和位于第一个位置的数据交换。(2)从剩下的n-1各数据中选择次小的一个元素,将其和位于第二个位置的数据交换。(3)这样不断重读,直到最后两个数据完成交换。最后,完成对原始数组从小到大的排序。void SelectionSort(int* a,int len){ int i,j,k,h; i...原创 2020-02-17 21:21:48 · 153 阅读 · 0 评论 -
冒泡排序法
冒泡排序算法通过多次比较和交换来实现排序,其排序流程如下:(1)对数组中的各数据,依次比较相邻的两个元素大小。(2)如果前面的数据大于后面的数据,就交换这两个的数据。经过第一轮的多次比较排序之后,便可把最小的数据排好。(3)再用同样的方法把剩下的数据逐个进行比较,最后便可按照从小到大的顺序排好数组中各数据的顺序。void BubbleSort(int *a,int len){ int ...原创 2020-02-16 22:13:59 · 110 阅读 · 0 评论 -
蒙特卡罗算法计算圆周率π
(1)均匀撒点:在C语言中可以使用随机函数来实现,产生【0,1】之间的随机坐标【x,y】。(2)区域判断:图中阴影部分的特点是距离坐标原点的距离小于等于1,这样,可以通过计算判断x2+y2<=1来实现。#include<stdio.h>#include<time.h>#include<stdlib.h>double MontePI(int n)...原创 2020-02-16 20:21:47 · 763 阅读 · 1 评论 -
关于ungetc(ch,stdin)用法
要求用户输入一串整数和任意数目的空格,这些整数必须位于同一行中,但允许出现该行中任一位置。当用户按enter键时退出程序。程序自动对输入的数字进行求和。#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>int main(){ int i = 0; int sum = 0;...原创 2020-02-15 23:32:49 · 1437 阅读 · 0 评论 -
分治算法示例
通过一个例子来介绍分治算法的应用。一个袋子里有30枚银币,其中一枚银币为假,并且假银币和真银币一模一样,肉眼很难分辨,目前只知道假银币比真银币重量轻一点。请问如何找出假银币?首先来分析一下寻找假银币的问题,可以采用递归分治的思想来求解这个问题,操作如下:(1)首先为每个银币编号,然后将所有的银币等分为两份,放在天平的两边。这样就将区分30个银币的问题变为区分两堆银币的问题。(2)因为假银币的...原创 2020-02-15 20:20:04 · 645 阅读 · 0 评论 -
二叉树结构
二叉树准备数据#define MAXLEN 20//最大长度typedef char DATA;//定义元素类型typedef struct CBT//定义二叉树结点类型{ DATA data;//元素数据 struct CBT* left;//左子树结点指针 struct CBT* right;//右子树结点指针}CBTType;初始化二叉树CBTType* InitTre...原创 2020-02-12 13:00:09 · 149 阅读 · 0 评论 -
队列结构
队列结构中允许堆两端进行操作,但是两端的操作不同。在表的一端只能进行删除操作,称为队头;在表的另一端只能进行插入操作,称为队尾。如果队列中没有元素,称为空队列。(先进先出)入队列:将一个元素添加到队尾(相当于到队列最后排队等候)出队列:将队头的元素取出,同时删除该元素,使后一个元素成为队头。准备数据#define QUWUWLEN 15struct DATA{ char name[1...原创 2020-02-10 20:21:24 · 357 阅读 · 0 评论 -
栈结构
准备数据在栈结构中,只有栈顶元素是可以访问的,栈结构的数据运算也非常简单。一般栈结构的基本操作只有两个。(1)入栈Push:将数据保存到栈顶的操作。进行入栈操作之前,先修改栈顶指针,使其向上移动一个元素位置,然后将数据保存到栈顶指针所指的位置。(2)出栈Pop:将栈顶数据弹出的操作。通过修改栈顶指针,使其指向栈中的下一个元素。#define MAXLEN 50struct DATA{...原创 2020-02-09 18:54:25 · 125 阅读 · 0 评论 -
链表中常用的模块
链表中一些常用的模块简单分为以下几点:追加节点、插入头节点、查找结点、插入节点、删除结点、链表长度、打印所以结点。准备数据:struct Data{ char name[20]; char key[10]; int age;};typedef struct Node{ Data nodeData; struct Node*nextNode;}CLType;追加节点...原创 2020-02-07 14:48:07 · 160 阅读 · 0 评论 -
C++中经常用的一些代名词
1,‘栈 Stack栈是一种特殊的线性表,它只能在一个表的一个固定段进行数据节点的插入和删除操作。栈按照后进先出的原则来存储数据,也就是说先插入的数据将被压入栈底,最后插入的数据在栈顶,读出数据时,从栈顶开始逐个读出。栈在汇编语言程序中,经常用于重要数据的现场保护。栈中没有数据时,称为空栈。2队列 Queue队列和栈相似,也是一种特殊的线性表。和栈不同的是队列只允许在表的一端进行插入操作,而...原创 2020-01-20 20:25:42 · 218 阅读 · 0 评论 -
c++软件开发面试经历
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入一次笔试和面...原创 2019-12-17 16:18:47 · 191 阅读 · 1 评论 -
链表的逆序排列
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入#inclu...原创 2019-11-20 19:13:56 · 274 阅读 · 0 评论