![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 86
鱼日天
不要用制造问题时的同一水平思维来解决问题
展开
-
linux终端彩色打印(print/printf)
linux终端彩色打印(print/printf)显示规则\33[显示方式;前景色;背景色m ....... \33[0m实例: 高亮加粗+红色打印Hello Linuxprint("\33[1;31mHello Linux\n\33[0m")颜色规则备注说明:前景色 背景色 颜色-----------------------...原创 2020-04-04 16:14:20 · 1413 阅读 · 1 评论 -
Direct3D开发配置指南
Direct3D开发配置指南环境: win10 + VS2017 + DirectX111. 环境安装DirectX SDK下载地址:http://download.microsoft.com/download/F/1/7/F178BCE4-FA19-428F-BB60-F3DEE1130BFA/DXSDK_Feb10.exeVisual Studio下载地址:https://vi...原创 2020-02-07 16:11:39 · 604 阅读 · 0 评论 -
linux汇编知识总结(GAS和NASM汇编)
linux汇编总结(GAS和NASM汇编)参考:1. 阮一峰的网络日志:汇编语言入门教程2. x86 Assembly Guide3. Linux 汇编器:对比 GAS 和 NASM目录:1. 何为汇编2.[.s][.o]等后缀对比3. GAS和NASM汇编器对比4. 基本的汇编语法与指令5. 汇编中的系统调用6. 几个汇编程序例子1. 何为汇编?assembly la...原创 2019-12-28 00:09:37 · 2356 阅读 · 0 评论 -
C/C++宏定义汇总(#define,#ifdef,#inline等)
C/C++宏定义汇总(#define,#ifdef,#inline等)1. if逻辑宏定义用法#ifdef与#ifndef:希望对代码中的片段实现“部分注释,部分编译”的时候,用到#ifdef的宏定义;基本格式:#ifdef MACROcout << 1;#elsecout << 2;#endif如果标识符MACRO已定义(如#define MAC...原创 2019-12-13 18:39:02 · 749 阅读 · 0 评论 -
数据的机器表示--补码反码浮点数等
数据的机器表示–补码反码浮点数等参考:《计算机系统基础》(袁春凤版)工具进制转换器IEEE 754 单精度浮点数转换器补码计算器补码、反码原码:1个符号位 + 值位: 0为正数,1位负数补码:正数的补码:自身不变;负数的补码:符号位不变,其余"按位取反,末尾加一";反码:正数的反码:自身不变;负数的反码: 符号位不变,其余“按位取反”;1.如...原创 2019-12-11 22:35:56 · 1042 阅读 · 0 评论 -
[人工智能AI]之搜索-A*算法
搜索—A*算法1. 概述这是一种经典的寻路算法;简而言之,重点在于估算距离。问题描述:假设起点a, 终点b, 当前结点为nF(n) = G(n) + H(n)G(n)表示起点到n实际距离;H(n)表示n到终点预估距离;在所有结点中选择F值最小的非障碍物走下去即可。缺陷:显然,A*算法的效率很大程度取决于H(n)的计算,即对未来距离的预估;未完待续…2. A*...原创 2019-11-18 16:58:12 · 1176 阅读 · 0 评论 -
C++内存泄漏和内存重叠的原因
C++内存泄漏和内存重叠的原因内存泄漏: 已经失去作用的堆内存未被及时释放,从而造成内存的浪费1. new、delete错误使用()new在堆区分配内存,却忘记通过delete释放;new申请二维数组,却只通过delete[] p释放了首位内存;(通过for循环逐个释放)这里补充数组和对象数组的释放,以及delete 和delete[]的区别:delete 释放单个对象指针...原创 2019-09-26 16:20:26 · 457 阅读 · 0 评论 -
C++虚函数的作用和实现原理
虚函数的作用和实现原理1. virtual虚函数作用实现C++三大特性之一的多态当父类的某个函数,需要在子类中重写时,就在父类中定义为虚函数;这样当定义一个父类指针指向子类时,就能动态地调用某子类的(被重写)函数;纯虚函数: 父类中没有定义,而在子类中需要用到,就定义为:virtual void f() = 0;class A {public: virtual void...原创 2019-09-26 15:21:49 · 1756 阅读 · 1 评论 -
STL之vector的原理和实现
STL之vector的原理和实现1. 基本用法略https://blog.csdn.net/luhao19980909/article/details/898845852. 内部原理vector内部主要实现了3个迭代器,分别指向实际头尾、最大容量的尾部;size()是实际大小,capicity()是实际容量,max_size()是理论支持的最大容量;下面代码展示了vector的扩...原创 2019-09-26 15:05:35 · 357 阅读 · 0 评论 -
C++单例模式的实现
C++单例模式的实现单例模式: 一个类有且只能有一个实例饿汉模式:自动完成初始化并创建一个实例,但是浪费内存(空间换取时间)懒汉模式:不初始化,线程不安全(时间换取空间)下面是实现代码:// 饿汉单例模式// instance是静态变量,需要在全局初始化,这样就自动创建了一个实例(同时有且只能有一个);class Singleon {private: Singleon...原创 2019-09-24 15:35:55 · 349 阅读 · 1 评论 -
STL之vector容器用法
STL之vector容器用法vector实际上是一个动态数组它预先指向一段连续的已分配好的内存空间1.0 头文件#include <vector>1.1 创建vectorvector<int> A; //声明一个int型vectorvector<int> A(10); //初始大小为10vector<int> A(10,...原创 2019-05-06 15:50:19 · 251 阅读 · 0 评论 -
STL之set容器用法
STL之set容器用法set中每个元素都唯一,就像集合;set中每个元素都是排好序的,因为内部采用红黑树实现;set区别与vector,它不能通过下标访问;1.0 头文件#include <set>1.1 创建setset<int> S; //声明一个int型vectorset<int> S(10); //初始大小为101.2 ...原创 2019-05-07 02:51:00 · 1076 阅读 · 0 评论 -
位运算总结
位运算总结~ 补码正数的补码:按位取反,末位加1& 与只有当相应位上的数都是1时,该位才取1,否则该为为0| 或只要相应位上存在1,那么该位就取1,均不为1,即为0^ 异或只有当相应位上的数字不相同时,该为才取1,若相同,即为0。//不使用额外O(1)空间来交换a,b的值a = a ^ b;b = b ^ a;a = a ^ b;<< 左移用来将一...原创 2019-05-10 01:15:35 · 377 阅读 · 0 评论 -
C++函数传参int a,int *a,int &a,const int &a的区别
函数传参int a,int &a,const int &a的区别#传参方式 作用int a值传递无法改变a的值int *a地址传递传入的是a是一个地址int &a引用传递传入的是一个指向a的指针,可直接修改a的值const int &a不改变值的引用传递提高传参效率,同时不允许...原创 2019-05-07 23:41:30 · 8072 阅读 · 4 评论 -
二叉搜索树的总结和实现
二叉搜索树1.0 定义每个节点包含属性left,right和p,分别指向左右子节点和父节点二叉搜索树的性质: x.left<= x <= x.right基本操作与树的高度有关,即O(lgn)数据结构查找插入,删除数组O(n)O(n)有序数组O(lgn)O(n)二叉树O(lgn)O(lgn)//定义Node类型templ...原创 2019-09-24 15:39:43 · 300 阅读 · 0 评论 -
图算法的总结和实现(未完成)
图算法的总结和实现1.0 图的表示图通常用两种数据结构表示:邻接矩阵->稠密图、邻接链表->稀疏图对于图 G = (V, E) ,V是点集,E是边集,|V| |E|分别表示点、边的数目稀疏图:边数很少的图稠密图:边数接近|V|^2的图(一个图边数最多是点数的平方,只考虑单边图)邻接矩阵维护一个n*n的数组,n是图的点数|V|根据图的性质,数组对角线都为0,上...原创 2019-07-24 13:23:40 · 188 阅读 · 0 评论 -
linux下纯C实现协程(借助setjmp/longjmp) (未完成)
linux下纯C实现协程(借助setjmp/longjmp)1.如何理解协程(coroutine)首先,协程是在单个线程下讨论的概念;何谓协程,就是满足如下定义:可以随时“挂起”之后可以回到“挂起”的状态继续执行Python中的yield产生器很好地解释了协程的原理,它可以产生所有自然数;重要的是,它不必每次从头开始生成,利用next()可以记住上次生成到了哪个数,它是有“记忆的...原创 2019-07-24 13:27:59 · 943 阅读 · 0 评论 -
C++11新特性总结
C++11新特性总结1. nullptr 空指针首先明白null的用法,注意在C和C++中null的宏定义是不同的;C: #define NULL ((void *) 0); // 表示将0强制转化成空指针,本质是空指针C++: #define NULL 0; // 表示0,本质是int型试想下列应用情景,在实现传入int和char的函数重载时,我们希望NULL传入char,但...原创 2019-09-04 22:45:15 · 169 阅读 · 0 评论 -
C++ static关键字用法
C++ static关键字用法1. 声明static的全局函数无法被其他源文件引用若在a.cpp中将func定义为静态全局函数,那么一起编译时b.cpp将无法调用func()// a.cppstatic void func(){}// b.cppint main(){ func(); return 0;}2. 函数内static的局部变量能保持内容的记忆性函数内的...原创 2019-09-05 19:55:17 · 617 阅读 · 0 评论 -
判断小端和大端(字节序)
判断小端和大端(字节序)1. 小端大端的概念这是针对CPU而言,根据低地址存储还是高地址存储从而区分小端大端(字节)在小端模式中,低位字节放在低地址,高位字节放在高地址;在大端模式中,低位字节放在高地址,高位字节放在低地址# 而实际上,大端更符合人的直观逻辑2. C++判断小端大端#include <stdio.h>int main(){ short ...原创 2019-09-06 15:14:22 · 378 阅读 · 0 评论 -
操作系统之fork()函数
操作系统之fork()函数int main() { pid_t pid; // 在执行fork()函数前,系统只有一个进程在执行 pid = fork(); // 此后出现两个一样的进程,也就是说需要执行下面的代码两次 /* * fork()函数一共返回两次,: * 在父进程中,返回新创建的子进程的pid * 在子进程中,返回...原创 2019-09-08 13:22:43 · 264 阅读 · 0 评论 -
sizeof、strlen、length()等求数据结构大小汇总
sizeof、strlen、length()等求数据结构大小汇总名称用法sizeof结构体strlenchar字符串length()string字符串strcpy字符串拷贝函数strcat字符串拼接函数1. sizeof()首先sizeof是一个操作符,它不是一个函数;应用场景:求基本类型、结构体、数组等bit位大小;如size...原创 2019-09-22 16:25:20 · 948 阅读 · 0 评论 -
template模板的用法
template模板的用法1. 函数模板想象实现一个比较大小的函数, 如果想要比较long, doube等类型,是否就需要写很多种函数(而且只是参数类型不同而已)?int cmp(int a, int b) { return a>b; }像STL中的stack等就用到了模板,在初始化的时候,stack S; 实际就是声明模板中typename为int所以出现下面的写法:...原创 2019-09-22 18:36:16 · 386 阅读 · 0 评论 -
运算符的重载operator
运算符的重载operator重写:针对子类父类而言,函数名参数一样,但函数内容不一样;重载:针对函数而言,同名同内容,只是参数的类型和数量不同;operator重载基本格式:返回值类型 operator 运算符号(参数列表){ // TODO}下面举例实现了一个复数类(3i+5)class Complex {public: Complex(): real(0.0...原创 2019-09-22 18:43:53 · 201 阅读 · 0 评论 -
C++11智能指针的原理与实现
C++11智能指针的原理与实现1. 概述智能指针是C++11引入的新特性,头文件<memory>它实际是对一个普通指针封装成的类,并重载了*和->的两个操作符2. 简单的使用shared_ptr:基于引用计数,用于多个指针指向同一个对象的情况,初始时计数+1,折构时计数-1,计数0时自动释放;sizeof(shared_ptr) = 16;可以看到shar...原创 2019-09-22 19:22:57 · 244 阅读 · 0 评论 -
C++模版template用法
template用法C++和python区别:C++是强类型语言,python是弱类型语言;区别在于,python可以把任意类型的变量传入处理,而C++需要声明不同的变量类型;这就导致了,若编写一个比大小的函数,C++要写int/float/char等等的多种,很麻烦;因此出现了template模版的定义;如下列实现了一个不区分int/float/…比较大小的函数template...原创 2019-05-03 21:36:26 · 1319 阅读 · 0 评论