C++
文章平均质量分 63
-牧野-
这个作者很懒,什么都没留下…
展开
-
git基本指令
1. 拉取子模块git clone 仓库地址git submodule update --init --recursive或直接git clone --recursive 仓库地址2. 相关信息查看查看远程仓库地址git remote -v查看本地分支所跟踪的远程分支git branch -vv查看用户名和邮箱git config user.namegit config user.email修改用户名和邮箱git config --global user.name "NewUs原创 2021-04-09 09:01:54 · 1208 阅读 · 0 评论 -
Visual Studio2019实用快捷键
F5 开始调试Shift + F5 停止调试Ctrl + Shift + F5 重新启动调试F9 设置或删除断点Ctrl + Shift + F9 删除所有断点F10 逐过程执行Ctrl + F10 (启动调试) 运行到当前行F11 逐语句执行Shift + F11 跳出当前执行的函数体部分F12 转到定义或实现Ctrl + K...原创 2019-10-21 09:10:30 · 14991 阅读 · 0 评论 -
谷歌C++ 编码规范(部分)
参考资料:谷歌C++ 风格指南一. 头文件1. 通常每一个 .cc 文件都有一个对应的 .h 文件. 也有一些常见例外, 如单元测试代码和只包含 main() 函数的 .cc 文件2. 所有头文件都应该使用 #define 来防止头文件被多重包含. (Windows中很多使用 #pragma once )二. 命名空间1. 鼓励在 .cc 文件内使用命名空间,命名空...原创 2019-10-15 19:22:37 · 1654 阅读 · 0 评论 -
C++(一)
1. i++与++i 问题i++: i先参与运算,再自增1;++i: i先自增加1, 再参与运算。2. 三元运算符条件?操作一:操作二条件为真,执行操作一,条件为假,执行操作二。注意确定“条件”的范围,有时候并不是把全部的左边表达式作为“条件”的。例如:int a=9,c;c=(a++==9);这里c等于括号里的判定结果,a++==a 为真,所以 c = 1...原创 2018-10-28 18:02:34 · 465 阅读 · 0 评论 -
数据结构
数据结构概念数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科,是相互之间存在一种或多种特定关系的数据元素的集合。数据: 描述客观事物的符号,是计算机中可以操作的对象,能被计算机识别,并可以输入给计算机处理的符号集合。结构: 指数据集合中各个组成部分相互搭配和排列的方式,也就是数据关系。程序设计 = 数据结构 + 算法 逻辑结...原创 2018-10-24 10:02:02 · 1110 阅读 · 0 评论 -
C++(二)
函数指针函数指针是指向函数的指针。函数具有可赋值给指针的物理内存地址,一个函数的函数名就是一个指针,它指向内存中存放函数代码块的起始地址。函数指针的定义:类型 (*指针变量名)(参数列表);例如: int (*p)(int i,int j);这里定义了一个函数指针,该函数具有两个int类型的参数,返回类型为int,指针名称是p,指针符号*跟指针名称用括号括...原创 2018-10-29 20:05:42 · 536 阅读 · 0 评论 -
C中几个递归问题
1. 计算累和 1+2+3+……+n#include<stdio.h>#include<stdlib.h>#include<string.h>int add_up(int n){ if(n==1){ return 1; } return n+add_up(n-1);}void main(){ ...原创 2018-10-31 14:36:55 · 2540 阅读 · 1 评论 -
C++ 类
C结构体、C++结构体、C++中类C语言中的struct中只能定义成员变量,不能定义成员函数,可以定义函数指针; 所以C中的struct可以看作是一个复杂的数据类型,不能用于面向对象编程。C++中的struct既可以定义成员变量也可以定义成员函数;C中声明结构体变量的时候struct关键字不能省,C++中可以省略。C++中class跟struct的区别是类中成员默认是私有的,str...原创 2018-10-31 21:04:11 · 962 阅读 · 0 评论 -
C中位运算、逻辑运算
C中的位运算&: 按位与(两者同为1则为1,否则为0) |:按位或 (两则同为0则为0,否则为1) ^: 按位异或(两则相同则为0,相异则为1) ~: 取反 (1取0,0取1) <<:左移 (相当于乘2) >>:右移 (相当于除2)验证:#include <stdio.h>int main(){ int a = 5; ...原创 2018-10-24 21:05:39 · 2580 阅读 · 0 评论 -
C数据结构常见树型结构和二叉排序树基本操作
二叉树: 二叉树是每个节点最多有两个子树的树结构。二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。 满二叉树: 高度为h,并且由2{h} –1个结点的二叉树,被称为满二叉树。 完全二叉树: 一棵二叉树中,只有最下面两层结点的度可以小于2,并且最下一层的叶结点集中在靠左的若干位置上。这样的二叉树称为完全二叉树。一棵满二叉树必定是一棵完全二叉树,而完全二叉树...原创 2018-11-06 20:31:35 · 651 阅读 · 0 评论 -
C 数据结构中单链表基本操作
C中的typedefC中的typedef关键字作用是为一种数据类型定义一个新名字,这样做的目的有两个,一是给变量定义一个易记且意义明确的新名字,如:typedef unsigned char BYTE;把unsigned char类型自命名为BYTE。另一个目的是简化一些比较复杂的类型声明,比如struct结构类型: typedef struct student ...原创 2018-11-02 09:40:18 · 727 阅读 · 0 评论 -
C 数据结构中双链表基本操作
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。#include<stdio.h>#include<stdlib.h>#include<string.h>//定义双链表结点typedef struct dNode{ ...原创 2018-11-05 20:43:08 · 453 阅读 · 0 评论 -
C 数据结构循环链表(带环链表)基本操作
经典循环链表之约瑟夫问题:标号从1到n的n个人围成一个圈,从1开始计数到m的人退出圈子,然后从退出的下一个人开始接着从1计数,数到m的人后继续退出,最后只剩下一个人,求剩下人的编号。这便是约瑟夫问题的模型。经典循环链表之魔术师发牌问题:魔术师手中有A、2、3……J、Q、K十三张黑桃扑克牌。在表演魔术前,魔术师已经将他们按照一定的顺序叠放好(有花色的一面朝下)。魔术表演过程为:一开始,魔术师数1...原创 2018-11-05 20:48:49 · 651 阅读 · 0 评论 -
C 数据结构队列和栈基本操作
队列队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。队列是一种操作受限制的线性表。与现实中的排队类似,进行插入操作只能在队尾,进行删除操作只能在队头。队列是一种先进先出的线性表。C实现队列,需要定义一个结点结构,一个含指向首结点和尾结点指针的结构(比链表多一个指向首尾的结构)。 队列的首指针指向第一个元素,队列的尾指针指向最后...原创 2018-11-05 20:55:31 · 1663 阅读 · 1 评论 -
C 数据结构之十大排序 三大查找
本文gif图片来自 一像素排序问题相关描述排序问题: 整理文件中的记录,使之按关键字递增或递减的顺序排列起来。排序算法的稳定性: 若排序对象中存在多个关键字相同的记录,经过排序后,相同关键字的记录之间的相对次序保持不变,则该排序方法是稳定的,若次序发生变化(哪怕只有两条记录之间),则该排序方法是不稳定的。不稳定的排序有选择排序、希尔排序、堆排序和快速排序。排序方法的分类: ...原创 2018-11-08 19:40:28 · 10989 阅读 · 10 评论 -
C 字符串基本操作
在 C 语言中,字符串是由数字、字母、下划线组成的一维字符数组,并且使用 null 字符 '\0' 作为终止符号。字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,如s=“abcdefg”,则s[0]=“a”,s[1]="b"。字符实际上是以对应的ASCII数值的形式在内存中存储的。 对一个字符强制转换成int类型,得到的就是该字符的ASCII码。字符与字符相减,...原创 2018-11-12 19:29:18 · 2489 阅读 · 0 评论 -
C++ 基类指针和派生类指针之间的转换
函数重载、函数隐藏、函数覆盖函数重载只会发生在同作用域中(或同一个类中),函数名称相同,但参数类型或参数个数不同。 函数重载不能通过函数的返回类型来区分,因为在函数返回之前我们并不知道函数的返回类型。函数隐藏和函数覆盖只会发生在基类和派生类之间。函数隐藏是指派生类中函数与基类中的函数同名,但是这个函数在基类中并没有被定义为虚函数,这种情况就是函数的隐藏。所谓隐藏是指使用常规的调...原创 2018-10-28 11:01:19 · 25280 阅读 · 9 评论 -
编译原理
进程在内存中的大概分布情况进程都需要占用一定内存,被占用的内存有些是事先静态分配和统一回收的,有些是按需动态分配和及时回收的。一般分为5种不同的内存数据段: 代码段:用来存放可执行文件完整的操作指令(机器码)和只读数据,为了防止代码段被非法修改,代码段的特点是只读不写的。如果一个程序有多个运行实体,则这些实体共享同一个代码段。 数据段:用来存放可执行文件中已经初始化了的全局变量,也...原创 2018-10-19 20:09:10 · 5801 阅读 · 0 评论 -
每次rand出来都是41?说好的随机数呢?!
rand()函数是C++标准函数库提供的随机数生成器,生成0-RAND_MAX之间的一个“伪随机”整数,理论上可以产生的最大数值为2^16-1,即32767。rand()函数不接受参数,默认以1为种子(seed,即起始值),这里的种子在随机数产生的过程中起了很大的作用,甚至可以说是起了决定性的作用。rand()=41?知道了这些让我们试着生成一个随机数#includeusing原创 2016-07-30 20:41:03 · 12962 阅读 · 4 评论 -
C++中volatile及编译器优化
修饰符volatile定义了一个“易变的、不稳定的、随时可能改变的”变量,对于被声明为volatile的变量的使用上跟普通的变量没有什么区别,最大的影响,就是编译器不能按照常规方式对其进行优化。这就引入了两个问题:编译器为何对访问变量的方式做优化以及如何优化?原创 2016-07-19 21:39:30 · 6172 阅读 · 1 评论 -
C++ main函数中参数argc和argv含义及用法
argc 是 argument count的缩写,表示传入main函数的参数个数;argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0]一定是程序的名称,并且包含了程序所在的完整路径,所以确切的说需要我们输入的main函数的参数个数应该是argc-1个;简单用法示例,新建工程键代码:#include using nam原创 2016-07-22 00:08:27 · 208336 阅读 · 37 评论 -
贪吃蛇小游戏—C++、Opencv编写实现
贪吃蛇游戏,C++、Opencv实现设计思路:1.显示初始画面,蛇头box初始位置为中心,食物box位置随机2.按随机方向移动蛇头,按a、s、d、w键控制移动方向,分别为向左,向下,向右,向上3.蛇头位置与食物box位置重合,则把食物box加入到蛇身向量arraryBox里,并设置食物box为第一个元素4.蛇身各个box移动规律是,每次移动后一个box的位置变为前一个box的位置5.蛇头移动超越边界,游戏结束开始界面:原创 2016-08-01 00:31:21 · 4419 阅读 · 1 评论 -
15个你不可不知的cmd命令
cmd和dos:dos是Disk Operating System 磁盘操作系统的缩写,它是个人计算机上的一类操作系统。跟Windows图像界面操作系统不同的是,dos是一种面向磁盘的操作系统,并且它是16位的。cmd是command的缩写,它是32/64位windows NT内核系统的一个应用程序,可以通过在命令提示符窗口中执行命令行操作Windows系统,实现部分dos系统所拥有的功能。所以首先它是Windows系统下的一个程序,跟dos是操作系统不是一个层面上的。常用的cmd命令:ipc原创 2016-07-22 23:40:45 · 11391 阅读 · 0 评论 -
静态库、动态库,dll文件、lib文件,隐式链接、显式链接浅见
静态链接、动态链接静态库和动态库分别应用在静态链接方式和动态链接方式中,所谓静态链接方式是指在程序执行之前完成所有的链接工作,把静态库一起打包合入,生成一个可执行的目标文件(EXE文件)。所谓动态链接方式是指可执行目标文件在执行过程中才去加载调用相关功能函数,即在需要时才按需调用,是动态使用的。静态库、动态库、隐式链接和显示链接中操作对象都是库,那么什么是库?库原创 2016-12-01 23:10:13 · 4015 阅读 · 0 评论 -
DLL动态库的创建,隐式加载和显式加载
动态库的创建打开VS,创建如下控制台工程,工程命名为DllTest:在弹出的对话框中选择“DLL”后单击“完成”按钮:在工程中新建DllTest.h和DllTest.cpp文件,在DllTest.h头文件中加入以下代码:#ifndef _DLLTEST_H_#define _DLLTEST_H_extern "C" _dec原创 2016-12-02 20:32:02 · 10871 阅读 · 2 评论 -
C++使用thread类多线程编程
C++11中引入了一个用于多线程操作的thread类,简单多线程示例:#include #include #include using namespace std;void thread01(){ for (int i = 0; i < 5; i++) { cout << "Thread 01 is working !" << endl; Sleep(100); }原创 2016-12-28 20:23:13 · 71409 阅读 · 20 评论 -
C++使用Windows API CreateMutex函数多线程编程
C++中也可以使用Windows 系统中对应的API函数进行多线程编程。使用CreateThread函数创建线程,并且可以通过CreateMutex创建一个互斥量实现线程间数据的同步:#include #include using namespace std;HANDLE hMutex = NULL; //互斥量DWORD WINAPI thread01(LPVOID l原创 2016-12-28 21:00:28 · 10511 阅读 · 0 评论 -
“warning C4996: 'fopen': This function or variable may be unsafe”和“LINK : fatal error LNK1104”的解决办法
程序有时编译出现警告C4996,报错: warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details:原创 2016-12-31 12:47:33 · 1138 阅读 · 0 评论 -
C++中explicit关键字用法
在C++类的实例化过程中,存在一种隐式转换,即可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换。一个简单的例子:#include #include using namespace std;class Book{public: Book(){} Book(const string name, const int price = 100) : _原创 2017-07-19 21:31:54 · 5566 阅读 · 1 评论 -
mstsc Windows局域网内远程桌面连接
1.检查被连接计算机的远程桌面连接功能是否开启 控制面板->系统和安全->系统->远程设置->远程桌面->勾选“仅允许运行使用网络级别身份验证的远程桌面的计算机连接”。也可以直接在“计算机”右键“属性”直接打开“系统”。 2. 开启防火墙并允许远程桌面 控制面板->系统和安全->Windows防火墙->自定义设置->启动Windows防火墙...原创 2018-03-09 12:00:45 · 3888 阅读 · 0 评论 -
计算机组成原理
冯诺依曼体系结构冯诺依曼提出“存储程序”原理,即把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式储存,以此为基础的计算机称为冯诺依曼机。特点:①计算机由运算器,控制器,存储器,输入和输出五部分组成②指令和数据以同等的地位存放于存储器内,并可按地址寻访③指令和数据均用二进制数表示④指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数在存储器中的位置⑤指令在...原创 2018-10-18 08:44:14 · 37694 阅读 · 1 评论 -
计算机网络
TCP/IP协议TCP/IP协议不是“一个”协议,而是一个协议群的统称。里面包括了IP协议,IMCP协议,TCP协议,以及我们更加熟悉的http、ftp、pop3协议等。互联网进行通信时,需要相应的网络协议,TCP/IP就是为使用互联网而开发制定的协议族,是一系列互联网协议的统称,因为TCP和IP在这一系列协议中比较重要,所以就以它们来命名了。TCP/IP协议为什么分层?TCP/IP协议族...原创 2018-10-18 15:44:18 · 1172 阅读 · 0 评论 -
计算机操作系统
1. 进程和线程进程是具有一定功能的程序在某个数据集上的一次运行活动,是系统进行资源调度和分配的一个独立单位。线程是进程的实体,是CPU调度和分配的基本单位,是比进程更小的能独立运行的基本单位。一个进程可以有多个线程,多个线程可以并发执行。线程执行开销小,但不利于资源管理和保护,进程相反。引入进程的目的,是为了使多道程序并发执行,以提高资源利用率和系统吞吐量;而引入线程,则是为了减...原创 2018-10-16 20:00:17 · 810 阅读 · 0 评论 -
string类中运算符重载实现
C++中预定义的加、减等运算符的操作对象只能是基本的数据类型。如果要在用户自定义的类型对象上应用同样的运算符,就需要通过运算符重载来重新定义其实现,使它能够用于自定义类型执行特定的操作,所以运算符重载的基本要求是要跟应用在基本数据类型上的功能“”看起来“”是一致的。运算符重载的实质是函数重载,其定义也于一般函数的定义类似,唯一一点区别是运算符函数的函数名是由关键字operator和其后要重载的原创 2016-07-26 21:12:47 · 6307 阅读 · 0 评论