- 博客(21)
- 收藏
- 关注
转载 C++中模板以及模板实例化都放在头文件
前言根据之前的习惯,我们一般会把一个函数的声明放在.h文件中,把函数的实现放在.cpp文件中,但是涉及到模板时,这种组织方式会报错。先放结论:涉及到模板和模板特例化时,我们一般将模板和模板特例化一起放在对应的.h文件中。问题的产生通过下例来说明问题。例如在array.h文件中有模板类array:// array.htemplate <typename T, int SIZE>class array{ T data_[SIZE]; array (const...
2021-09-22 11:41:18
1876
2
转载 运算符重载
运算符重载,是C++多态的表现形式之一,可以通过对运算符进行重载来实现运算符特定的功能。运算符重载一般具有以下原则:(1)不可重载不存在的运算符,如重载**来表示平方等;(2)重载后的运算符与原来的运算符优先级、结合性以及操作数数目相同,如双目运算符不能重载为单目;(3)保留运算符本身的含义,如“+”号重载后应该保持其“求和”的自然含义;(4)操作数中至少有一个为自定义类型,如重载运算符中参数都是int、double等类型是不允许的;对于运算符重载可通过成员函数和非成员函数实现,这二者的区别如
2021-07-05 10:07:10
146
转载 一致性哈希
原文链接:https://www.zsythink.net/archives/1182在了解一致性哈希算法之前,最好先了解一下缓存中的一个应用场景,了解了这个应用场景之后,再来理解一致性哈希算法,就容易多了,也更能体现出一致性哈希算法的优点,那么,我们先来描述一下这个经典的分布式缓存的应用场景。场景描述假设,我们有三台缓存服务器,用于缓存图片,我们为这三台缓存服务器编号为0号、1号、2号,现在,有3万张图片需要缓存,我们希望这些图片被均匀的缓存到这3台服务器上,以便它们能够分摊缓存的压力。也就是
2021-06-26 15:01:25
93
转载 2021-03-08
new与malloc的10点区别1. 申请的内存所在位置new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。那么自由存储区是否能够是堆(问题等价于new是否能在堆上动态分配内存),这
2021-03-08 23:48:42
96
转载 2021-03-08
其实,不用分为三类,只有两类即可。传值和传引用。为什么会出现传地址(即传指针)呢?本质就是大家一致对传值和传地址概念的理解错误导致,也是对指针的概念的理解错误导致。概念**指针:**指针就是一个变量,如果非要说是一个特殊的变量也不为过,因为指针的初始化和解引用等不同的操作方式而已。就内存的分布来说,指针和一个变量在内存中存放是没有任何区别的,无非指针存放的是变量的地址。**传值:**传值无非就是实参拷贝传递给形参,单向传递(实参->形参),赋值完毕后实参就和形参没有任何联系,对形参的修改就
2021-03-08 14:25:35
75
转载 list容器的排序算法sort()
STL源码剖析——list容器的排序算法sort()前言 由于STL本身的排序算法sort接受的输入迭代器是随机访问迭代器,但是双向list链表容器的访问方式是双向迭代器,因此,不能使用STL本身的排序算法sort,必须自己定义属于自己访问的排序算法。我们从源码的剖析中,可以看到该排序算法思想类似于归并排序。list容器之排序算法sort 在该排序算法的实现过程中,定义了一个类似于搬运作用的链表carry和具有中转站作用的链表counter,这里首先对counter[i]里...
2020-12-26 09:09:44
392
1
原创 C++中类大小计算
1、首先类大小计算遵循结构体的对齐原则2、类的大小与普通数据成员有关,与静态成员变量和成员函数无关,包括(静态成员变量,静态成员变量函数,普通成员函数,静态常量等与类的大小均无关)3、虚函数对类的大小有影响,这是因为虚函数表指针带来的影响4、虚继承对类的大小有影响,这是由于虚基表指针的影响4、空类的大小为1对其原则:按照结构体中长度最长的变量进行对齐,例如:class A{public: int a; char b;};A a1;sizeof(a1);该案例输
2020-12-10 23:02:31
377
转载 队列操作中----循环队列
引用链接:https://www.cnblogs.com/yangming1996/p/6973849.html我们知道队列这种数据结构的物理实现方式主要还是两种,一种是链队列(自定义节点类),另一种则是使用数组实现,两者各有优势。此处我们将要介绍的循环队列其实是队列的一种具体实现,由于一般的数组实现的队列结构在频繁出队的情况下,会产生假溢出现象,导致数组使用效率降低,所以引入循环队列这种结构。本文将从以下两个大角度介绍循环队列这种数据结构:循环数组实现循环队列一、循环队列为了深刻体会...
2020-12-04 11:00:32
317
转载 C++中const使用总结
原文链接 https://blog.csdn.net/Eric_Jo/article/details/4138548C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。一、Const作用 如下表所示: No. 作用 ...
2020-12-01 20:12:29
80
原创 C++指针与引用之间的区别
相同点:他们都是和地址有关系的,我们可以看到指针指向一块内存,而引用是一块内存的别名;不同点:1指针是一个实体他在栈中有自己使用的空间,但是引用没有;2引用必须初始化,指针不用但是最好初始化3指针使用时必须加*,引用不用;4引用只能初始化一次是个专一的人,指针不是;5引用不用const去修饰,但是指针可以6指针和地址运用自增(++)不同,引用是值进行自增,而指针是地址进行自增;注意:引用的话,只是给变量起了一个别名,并不另外占用空间,而指针是要在栈中开辟空间的关于引.
2020-12-01 18:31:16
83
原创 虚函数与纯虚函数
虚函数与纯虚函数1、虚函数关键字virtual用于类内成员函数定义时,为了重载和多态的需要,核心为:利用父类定义的指针可以指向子类的对象2、class Cman{ public: virtual void Eat(){……}; void Move();private:};class CChild : public CMan{ public: virtual void Eat(){……}; private:
2020-11-21 18:08:04
95
原创 2020-11-20
C++中static关键字的使用注意事项1、static修饰成员变量时,所有的对象只保存一个该成员变量,某一个对象中该静态成员变量改变,则其他对象中该变量随之改变;另外静态成员变量需要在类外初始化,既是类内定义,类外初始化。2、static修饰成员函数,static修饰的成员函数不能访问非成员变量,只能修饰static修饰的成员变量,static类成员函数是没有this指针的,...
2020-11-20 23:21:13
66
原创 指针常量和常量指针
C++中,指针部分是重点,且比价容易混淆1,指针常量 int* const p1 = &a; // 指针常量,指向不可修改,即p1不可修改;*p1 = b; //指向的值可修改,即*p可修改如果写成 p1 = &b就是错误的,因为在这里const修饰的是p1,所以p1不能修改2,常量指针 const int * p = &a; // 常量指针,指向的值不可修改,即*...
2020-09-13 10:18:21
122
原创 C++中幂次的表示
在c++中某个数的次幂不能用^表示,因为^在C++中的作用是位异或(XOR)c++中次幂的表示用pow函数,注意使用前要包含cmath头文件#include<iostream>#include<cmath>int main(){double a;int b;pow(a,b);}pow(a,b)表示的意思是a的b次幂,注意此处的a一定要为double类型。...
2020-09-05 10:42:29
26458
转载 字符型指针,数组,字符串赋值
一、C语言中,为什么字符串可以赋值给字符指针变量char *p,a='5';p=&a; //显然是正确的,p="abcd"; //但为什么也可以这样赋值??问:一直理解不了为什么可以将字串常量赋值给字符指针变量,请各位指点!答:双引号做了3件事:1.申请了空间(在常量区),存放了字符串2...
2019-07-09 10:17:44
7075
2
原创 C语言结构体中字符串赋值
struct student{char name[20];};#include <stdio.h>main(){ struct student s1; s1.name = "zhang"; printf("%s\n", s1.name); return 0;}以上的代码,编译会提示出错,因为在C结构体中,...
2019-07-08 17:15:40
9948
3
原创 基于STM32的高速多通道信息采集系统的设计实现 AD7606+STM32F105
毕业设计答辩基本结束,现将自己毕业设计设计中遇到的问题及解决办法记叙如下,希望可以帮到有需要的人。本次讲述第一部分--->硬件AD7606部分AD7606数据采集部分,采用Altium Designer软件,画原理图以及PCB板,这里需要注意的是元器件库中没有AD7606芯片的原理图,需要自己绘制,这里需要根据ad7606芯片引脚图(见ad7606中文数据手册),根据数据手册设置相应...
2019-05-26 13:01:53
5513
4
原创 紧接上文,程序烧录过程中出现问题及解决RDDI-DAP error
在options for target LED 选项中,主要需要改变的参数在debug中,选择 CMSIS-DAP Debugger,如下图然后点击settings 选项,出现如下界面,需要设置的地方有三个我的这个板子正确的设置方式如下图不同的板子和下载线,设置的可能不一样,如果不行,可以试一下上图三个需要设置地方的其他选项,设置正确后,程序就可以顺利写入电路板了。...
2019-03-30 09:14:16
23920
1
原创 CubeMx软件实现STM32f1系列芯片实战
一,首先安装CubeMx软件,可以从官网上免费下载。二,由于使用的是stm32f1系列的芯片,所以需要安装stm32f1系列对应的cubemx固件库,help->install new libraries三,新建工程 ,new project,此过程中选择stm32f103zet芯片。四,引脚设置1,先设置pg14和pd13为GPIO_OUTPUT.再设置pe0和pc...
2019-03-30 09:00:15
1303
转载 指针函数与函数指针
1)指针函数指的是一个函数返回值为指针类型的函数,本质就是个函数。类型关键字 *函数名(参数列表) int *fun(int a,int b);2)函数指针指的是指向函数的指针变量,本质是一个指针变量。类型关键字 (*函数名)(参数列表)int (*fun)(int a,int b);注意:函数指针在使用时与普通指针一样,需要初始化指向有效地址才能使用,函数指针则指向函...
2019-03-04 12:43:11
361
原创 全局变量 ,局部变量,static,extern
从作用域看:1>全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。2>局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。3...
2019-03-04 10:38:35
357
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人