- 博客(37)
- 收藏
- 关注
原创 牛客中的手套问题
最近在刷牛客的时候遇见了这个手套问题:我们一起来看一看链接:https://www.nowcoder.com/questionTerminal/365d5722fff640a0b6684391153加粗样式e58d8?pos=2&orderByHotValue=0&done=0来源:牛客网在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。A先生现在要出门,所以他要去地下室选手套。但是昏暗的灯光让他无法分辨手套的颜色,只能分辨出左右手。所以他会多拿
2020-06-17 22:02:54
395
原创 map和set的初步了解
STL容器大致分为两类,一类是序列式容器,一类是关联式容器。比如:vector list deque forward_list等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。序列式容器所谓序列容器即容器其中的元素都可序,但未必有序。常见的序列容器包括vector,list,deque,queue以及stack。关联式容器关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更
2020-06-13 21:30:50
257
原创 浅谈Linux的虚拟地址
为了防止不同进程同一时刻在物理内存中运行而对物理内存的争抢和占用,采用了虚拟的内存。我们先来回顾一下程序地址空间物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。内核空间对所有的进程都是共享的,其中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据,不管是内核程序还是用户程序,它们被编译和连接以后,所形成的指令和符号地址都是虚地址,而不是物理内存中的物理地址。我们来看一个代码:int g_val = 0;int
2020-05-28 20:04:14
797
原创 讲解c++中的智能指针
什么是智能指针首先从字面上来看,智能指针首先他是一个指针,但是他比一般的指针来说更加的智能。将基本类型指针封装为类对象指针,并在析构函数里编写delete语句删除指针指向的内存空间。C++里面的四个智能指针: auto_ ptr,shared_ ptr, weak_ ptr, unique_ ptr其中后三个是c++11支持,并且第一个已经被C++11弃用。为什么会出现智能指针我们先来看一个例子:void Test(){ // 动态申请一个int类型的空间 int* ptr1 = ne
2020-05-26 17:12:31
200
原创 偶识PDB文件
作为一名小白,我也是在遇到问题的时候才了解到了PDB文件。就是在一次重装系统后,我执行代码的时候出错了,告诉我无法打开PDB文件。最后发现了是在编译的时候,程序所依赖的动态链接库也会被编译,编译过程中每个 dll 都会产生一个pdb文件,又称为“符号文件”,是一个存储数据的信息文件,其包含 dll 库在编译过程的某些调试信息,例如程序中所用到的全局变量、局部变量、函数名以及他们的入口地址等动态库无法找到PDB文件。所以就出现找不到PDB文件的问题。最后我通过在网上寻求帮助,找了打开VS2013,点击菜
2020-05-25 15:18:37
278
原创 系统文件I/O
昨天写了C语言的中的操作文件的函数接口总结,今天我们来看一下系统接口对文件的一个操作。#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <string.h>int main(){ umask(0);//给后面的代码调用函数mkdir给出最大的权限 int
2020-05-24 15:20:29
115
原创 复习C语言的文件操作
C语言的文件操作fopen函数FILE *fopen( const char *filename, const char *mode );他有两个参数一个是文件路径和文件打开方式文件的打开方式有r:以只读的方式打开 r+:以只读写的方式打开 w:以只读的方式打开,如果文件不存在,则创建文件,如果文件存在,则截断文件(清空文件)。w+:以只读写的方式打开,如果文件不存在,则创建文件,如果文件存在,则截断文件(清空文件)。a:以追加的方式打开,如果文件不存在,则创建文件,如果文件存在,则将文件
2020-05-23 23:22:03
231
原创 我了解的c++中的模板
为什么需要模板?在C语言中我们如果要交换两个数,比如:int main(){ int a; int b; double c; double d;}因为C语言不支持函数重载,如果要交换a和b ,c和d我们需要写两个交换函数temp去完成。void _swapint(int *pa,int*pb){ int temp; temp = *pa; *pa = *pb; *pb = temp;}void _swapdouble(double *pc, double*pd){ do
2020-05-22 22:24:15
124
原创 分析C++中static和const关键字的作用
static声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。静态的成员变量一定要在类外进行初始化#include <iostream>using namespace std;class mine{ public: mine(int a, int b, int c); void GetSum(); private:
2020-05-20 20:48:02
214
原创 讲解Linux中的的fork函数
进程的创建说到创建一个进程,我们首先要了解Fork这个函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。#include <unistd.h>pid_t fork(void);返回值:自进程中返回0,父进程返回子进程id,出错返回-1内核中分配新的内存块和内核数据结构给子进程将父进程部分数据结构内容拷贝至子进程添加子进程到系统列表中去fork返回,开始调度器的调度fork之前父进程独立执行,fork之后,父子两个执行流分别执行。注意,fork之后
2020-05-19 22:40:14
133
原创 c++中的确省参数与函数重载
缺省参数打个比方来说,520快来了,许多男神女神都有很多备胎,C++中的函数的参数也可以配备备胎。``缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。void Test(int a = 0) { cout<<a<<endl; }int main(){ Test(); // 没有传参时,使用参数的默认值 Test(8); // 传参时,使用指定的实参}确省参数的分类全缺省参数全缺
2020-05-18 22:24:07
182
原创 初始c++中的类与对象
类具有相同或者相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例时对象。类具有属性,他是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。类的定义由类头和类体两部分组成,类头由关键字class开头,然后是类名,其命名规则与一般标识符的命名规则一致。class Name {public:...
2020-04-29 21:43:49
189
原创 与c++的第一次邂逅
在学习完C语言以后,开始初步的了解了c++首先我们来看c++与C语言的区别从设计思想上来说C语言是面向过程的语言,c++是面向对象的语言。C语言有32个关键字,c++有63个关键字。C语言的源文件的后缀名是.c,c++的源文件的后缀名是.cppc++支持重载函数,C语言不支持重载函数在函数返回值中,C语言没有指定返回值,则返回int型,c++中则必须指定返回voi...
2020-04-27 21:24:03
130
原创 初见识哈希表
什么是哈希表?根据设定的哈希函数及处理冲突的方法将查找表中各数据元素存储在一段有限的连续空间中。就可以得到哈希表。构造哈希函数的方法直接定值法图上的年龄跟存储地址可以构建什么样的哈希函数?H(key)=key-1,就是1岁放到0号位置,以此类推。数字分析法比如关键字是一个10进制的数字,并且你预知所有数字的关键字值,则可取关键字的若干位构成哈希地址。eg:位号:12345678...
2020-04-02 09:07:49
143
原创 我的小栈
什么是栈?栈是一种操作受限制的线性表,将允许进行插入、删除的一端称为栈顶,另一端称为栈底。我们可以从这个物理结构可以看出栈中的数据元素遵循后进先出.栈中允许插入,删除操作的为栈顶,另一端为栈底.。栈的概念因为栈是一种特殊的顺序表,因此与一般线性表一样,采用顺序存贮的方式来实现。及利用一组连续的存贮单元比如数组,依次放入从栈底到栈顶的数据元素,并且设置一个栈底指针top来表示栈顶元素的位置。我...
2020-01-03 15:04:16
103
原创 我了解的进程与线程
进程process进程是程序执行起来的一个实体,一个程序可以有多个进程。进程通常有程序,数据和进程控制块(PCB)组成。PCB的内容我们想在linux操作系统下查看进程可以用ps指令我输入了ps aux 指令显示其他用户启动的进程(a)查看系统中属于自己的进程(x)启动这个进程的用户和它启动的时间(u)这里的时间是指CPU处理这个进程所花费的时间pid:进程(抢占式执行)进...
2019-12-25 22:37:37
97
原创 初学linux的常用命令
定义:Linux命令是对Linux系统进行管理的命令。对于Linux来说,中央处理器,内存,磁盘驱动器,键盘,鼠标,还有用户都是文件。Linux的命令的数量非常庞大,全部掌握非常的困难,现在总结了一些Linux的基本命令以供学习大家都知道windows系统是通过图形可视化界面和鼠标来进行切换目录的,但是Linux系统却是通过cd命令来切换目录的,所以我们必须了解Linux的目录结构。cd...
2019-12-15 22:54:20
95
原创 单链表
概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。链表的优点:可以动态开辟空间,用多少开多少,减少空间的浪费。链表允许插入和移除表上任意位置上的节点,但是不允许随机读取。失去了数组随机读取的优点。链表的分类单向、双向链表带头、不带头链表循环、非循环链表链表的增删查改接口:#define _CRT_SECURE_NO_...
2019-12-15 20:17:37
120
原创 快慢指针
快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。快慢指针的引用:1.判断单链表是否为循环2.找到单链表中的中位数1.Eg:struct ListNode{ int val; struct ListNode *next;};typedef struct ListNode list;struct ListNode *findcircle(struct ListNode...
2019-11-21 22:37:17
72
原创 顺序表的功能实现
顺序表2.1概念及结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可以分为:静态顺序表:使用定长数组存储。动态顺序表:使用动态开辟的数组存储。typedef int SLDataType;typedef struct SeqList{ SLDataType* array; // 指向动态开辟的数...
2019-11-11 23:31:48
158
原创 时间空间复杂度
在面临一种问题时,我们可以写不同的算法来解决这个问题,但如何判断一个算法的优劣?不同的算法可能用不同的时间复杂度和空间复杂度来完成同样的任务。时间复杂度( come complexity)在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。但是我们不能真的去计算代码所运行的时间,因此,一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次(大概执行次...
2019-11-10 22:10:06
78
原创 程序的编译及预处理
编译与预处理编译预处理是指C语言对源程序在正常编译之后先执行源程序中的预处理命令。预处理后源程序在被正常编译,从而得到目标代码。预处理是编译的一部分,是编译中最先执行的部分。预处理在C语言中带#的行都是预处理命令,后面不加“;”结束符。多数编译的预处理都放在程序头,也可以根据需要放在的任何位置。宏定义在C语言中允许用一个标识符来表示一个字符串,称为宏。宏有有参宏和无参宏。无参宏定义#...
2019-11-08 21:25:51
581
原创 结构体
结构体在实际问题中,一组数据往往具有不同的数据类型。不能用数组来存储。所以出现了结构体,有若干成员组成(实型,整型,字符型),在说明和使用时都必须先构造他。struct 结构名{成员列表};Eg:struct stu{int num;char name;char sex;float score;} stu1,stu2;stu1和stu2为结构体变量。stu[5]定义了一个结...
2019-11-07 22:05:08
101
原创 小小通讯录
如何用C语言完成一个简单的通讯录项目?First我们首先得了解一个通讯录有哪些功能?如何用代码实现这些功能?1.通讯录的目录。2.联系人的添加。3.练习人的删除。4.通讯录的修改。5....
2019-11-05 23:06:25
162
原创 数据的储存
整型在内存中的储存计算机都是二进制来存储数据的。计算机用原码,反码,补码来表示有符号数。数据有符号位和数据为,符号位有‘0’和‘1’,1表示负数,0表示正数。原码:直接将二进制按照正负数的形式翻译成二进制就可以。反码:将原码的符号位不变,其他位依次按位取反就可以得到了。补码:反码+1就得到补码。在这个简单的程序中我们可以看见a的内存地址为04 00 00 00,跟我们写出来00 00...
2019-10-29 22:49:52
179
原创 初见动态内存
内存四区C语言程序中,代码是放在内存中去执行的,我们可以划分为四大区域。1.栈区:存放函数的参数值,局部变量等。当函数执行完毕时他们占有的空间自动释放。2.堆区:由程序员分配释放动态(内存的申请)。3.数据区:分为两种一是常量区,存放常量。一种是是全局区,存放全局变量和静态变量。4.程序代码区:存放函数的二进制代码。为什么要由动态内存的分配我们一般在栈上面开辟空间来存储参数和局部变量...
2019-10-27 23:13:49
89
原创 VS2013的调试
调试的目的:当我们在用编译器进行代码编写时可能会出现语法错误或者逻辑错误,这时候我们就需要对对自己的代码进行调试。调试的目的:调试则是在进行了成功的测试之后才开始的工作。调试的目的是确定错误的原因和位置,并改正错误,因此调试也称为纠错(Debug)。调试的快捷键:F6:生成解决方案。Ctrl+F6:生成当前项目。Shift+F7:查看窗体设计器。F5:启动调试。Ctrl+F5:开...
2019-10-24 21:55:22
548
原创 部分字符串处理函数的介绍
由于C语言中的字符串没有对应的字符串变量储存,所以在C语言中用字符数组存储字符串。字符数组的各个数组元素依次存放字符串的各个字符,字符数组的数组名代表该字符串的首地址。字符数组的初始化charc[8]={‘H’,‘e’,‘l’,‘l,‘o’};把6个字符分别赋值给c[0]到c[7]的8个元素,如果初值个数小于数组长度,则将这些字符赋给数组中前面那些元素,将其余元素自动赋值为空字符(’\0’)。...
2019-10-20 21:50:54
176
原创 冒泡排序
冒泡排序定义:他重复走访要排序的元素列,一次比较两个 相邻的元素,如果他们不是按顺序排列就将他们交换,直到没有要交换的元素就说明排序完成。冒泡代码#define _CRT_SECURE_NO_WARNINGS 1#include"stdio.h"void Maopao(int *arr, int len){ int i = 0; int flag; for(i = 0; i...
2019-10-11 22:02:45
62
原创 指针的深度剖析
深度剖析指针指针和指针变量:在C语言中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为"指针"。意思是通过它能找到以它为地址的内存单元。指针变量和指针将一个变量的地址称为变量的指针,存放变量a的内容的存储单元首地址就是变量a的指针。存放指向地址的变...
2019-10-09 22:05:44
87
原创 C语言中函数的嵌套和递归
函数的嵌套调用什么是函数的的嵌套?函数在C语言中,各个函数的定义都是相对独立的存在,在函数的内部可以调用其他的函数(这里面不包括main()函数)。这种调用过程叫做函数的嵌套(函数的定义部分不能嵌套)。例子:求两个整数的的最大公约数和最小公倍数。问题分析两个数的最小公倍数=两个数的乘积/两个数的最大公约数。所以key就是最大公约数.最大公约数求法思维图:代码实现#define...
2019-09-27 11:34:07
4472
原创 小游戏扫雷的开发
```game.h文件#define _CRT_SECURE_NO_WARNINGS 1#ifndef __GAME_H__ #define __GAME_H__#define ROW 9 #define COL 9#define ROWS ROW+2 #define COLS COL+2#define MINE_NUM 10#include<stdlib.h&g...
2019-09-24 18:56:33
188
原创 与操作符的的第一次亲密接触
操作符与表达式操作符也称运算符,是一种表示对数据进行某种运算处理的符号。通过编译器来识别这些运算符,完成各类运算。1.操作符的分类1.1算术运算符1.2逻辑运算符1.3赋值运算符1.4关系运算符1.5其他运算符一.算术运算符它包括"+","-","*","/“四则运算和”%“取余(又称求模运算)以及单目中的”-"(负号)运算符。“++”,“–”自加自减运算符有前置和后置的区别。...
2019-09-23 17:02:35
154
原创 三子棋游戏的实现
用C语言编写三子棋小游戏1.游戏流程与框架1.首先要创建一个初始化棋盘,2.然后将棋盘打印出来3.确定电脑或者玩家谁先移动4.设置胜利的条件:玩家或者电脑在3*3的棋盘上满足同一线上有自己的三颗自己的棋子,获得胜利。5.每一步操作后判断是否赢得胜利,胜利后终止游戏或者重新开始游戏。项目主要函数主题函数的实现1.玩家先手的游戏2电脑先手程序的实现游戏菜单的打印游戏继续...
2019-09-20 22:42:47
180
原创 编程之行
我是武万,一名普通的大学生。今天正式开始第一天的编程学习。首先希望自己从最初的学起,能慢慢进入程序员的门槛。最终形成自己的风格,慢慢得在这个行业中能做到一个不错的水平。我准备先熟悉一门编程语言,然后了解基础组织,再进一步的从代码写的过程中然后反复思考,从别人的想法中提取经验。然后不断完善自己。大概一周在编程上花20个小时的时间来学习.希望毕业了能进入腾讯工作。欢迎使用Markdown编辑器你好...
2019-09-04 23:09:21
151
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人