目录
栈内存 ,堆内存区别
C++ 动态内存
== 与equal区别
复合函数奇偶性
三角函数转换公式:
虚函数和纯虚函数:
C++ 中的运算符重载
数据封装,数据抽象
C++ 接口(抽象类):
#和##运算符
const,volatile ,restrict 解释
总结排序:认准1.数组规模。2.数组是否基本有序3.是否要求稳定
计算机原理中的位向量表示集合:
结构体解释:
逗号运算符和逗号表达式
switch的default问题。不同位置结果不同
p是指针,p++就是指针的移位
补充*++p,++*p,*p++,*(p++):
纯虚函数,虚函数,友原函数,内联函数
::是运算符中等级最高的
inline,内联函数
栈内存 ,堆内存区别栈内存:在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
堆内存:用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
C++ 动态内存栈:在函数内部声明的所有变量都将占用栈内存。 堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存。 很多时候,您无法提前预知需要多少内存来存储某个定义变量中的特定信息,所需内存的大小需要在运行时才能确定。
在 C++ 中,您可以使用特殊的运算符为给定类型的变量在运行时分配堆内的内存,这会返回所分配的空间地址。这种运算符即 new 运算符。
如果您不再需要动态分配的内存空间,可以使用 delete 运算符,删除之前由 new 运算符分配的内存。
new 和 delete 运算符
== 与equal区别
“equal”先比较地址,不相等,再比较指针最终指向的是数值,
"=="比较的是对象地址。这是根本的区别。
复合函数奇偶性由两个函数复合而成的复合函数
当里层的函数是偶函数时,复合函数的偶函数,不论外层是怎样的函数;当里层的函数是奇函数、外层的函数也是奇函数时,复合函数是奇函数,当里层的函数是奇函数、外层的函数是偶函数时,复合函数是偶函数。
总结:只有奇奇是奇奇,别的都是偶。
三角函数转换公式:
sin^2(x)+cos^2(x)=1;
1+tan^2(x)=sec^2(x);
1+cot^2(x)=csc^2(x);
cos(2x)=1-2sin^2 (x) = 2cos^2x-1 = cos^2(x)-sin^2(x);
(tan(x))'=sec^2(x) = 1+tan^2(x);
sin(2x)=2sin(x)cos(x);
虚函数和纯虚函数:
就是java中的抽象,纯虚函数只有声明没有具体实现就是空方法,在子类中必须重新写,虚函数就是在积累中写了有实现。他们都得用关键字 virtual 声明的函数 1. 虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class)。
2. 虚函数可以被直接使用,也可以被子类(sub class)重载以后以多态的形式调用,而纯虚函数必须在子类(sub class)中实现该函数才可以使用,因为纯虚函数在基类(base class)只有声明而没有定义
3. 虚函数和纯虚函数都可以在子类(sub class)中被重载,以多态的形式被调用。
4. 虚函数和纯虚函数通常存在于抽象基类(abstract base class -ABC)之中,被继承的子类重载,目的是提供一个统一的接口。
C++ 中的运算符重载
重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。
Box operator+(const Box&); 声明加法运算符用于把两个 Box 对象相加,返回最终的 Box 对象。大多数的重载运算符可被定义为普通的非成员函数或者被定义为类成员函数。如果我们定义上面的函数为类的非成员函数,那么我们需要为每次操作传递两个参数,如下所示:
Box operator+(const Box&, const Box&);
数据封装,数据抽象数据封装是一种把数据和操作数据的函数捆绑在一起的机制
数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制
C++ 接口(抽象类):
如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 "= 0" 来指定的,如下所示:
class Box { public: // 纯虚函数
virtual double getVolume() = 0;
#和##运算符
#是预处理?是的,你可以这么认为。那怎么用它呢? 别急,先看下面例子:
#define SQR(x) printf("The square of x is %d.\n", ((x)*(x)));
The square of x is 64.
注意到没有,引号中的字符 x 被当作普通文本来处理,而不是被当作一个可以被替换的语言符号。
假如你确实希望在字符串中包含宏参数,那我们就可以使用“#” ,它可以把语言符号转
化为字符串。上面的例子改一改:
#define SQR(x) printf("The square of "#x" is %d.\n", ((x)*(x)));
The square of 8 is 64.
##运算符可以用于宏函数的替换部分。这个运算符把两个语言符号组合成单个语言符号。看例子:
#define XNAME(n) x ## n
则会被展开成这样:
x8
也就是说,##就是个粘合剂,将前后两部分粘合起来。
const,volatile ,restrict 解释
const 类型的对象在程序执行期间不能被修改改变。 volatile 修饰符 volatile 告诉编译器不需要优化volatile声明的变量,让程序可以直接从内存中读取变量。对于一般的变量编译器会对变量进行优化,将内存中的变量值放在寄存器中以加快读写效率。 restrict 由 restrict 修饰的指针是唯一一种访问它所指向的对象的方式。只有 C99 增加了新的类型限定符 restrict。
总结排序:认准1.数组规模。2.数组是否基本有序3.是否要求稳定
记住:冒泡以及归并是稳定的。
快排不稳定,基本就能解决问题
(1)若n较小(如n≤50),可采用直接插入或直接选择排序。 当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。 (2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜; (3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。 快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短; 堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。 若要求排序稳定,则可选用归并排序。但本章介绍的从单个记录起进行两两归并的 排序算法并不值得提倡,通常可以将它和直接插入排序结合在一起使用。先利用直接插入排序求得较长的有序子文件,然后再两两归并之。因为直接插入排序是稳定 的,所以改进后的归并排序仍是稳定的。
计算机原理中的位向量表示集合:a=[01101001]表示{0,3,5,6} b=[01010101]表示{0,2,4,6} 最终a&b={01000001}={0,6}
以题目的例子来讲,a=[01101001],从右边数起,第0、3、5、6位是1,所以就表示了0、3、5、6这4个数,b的话同理,对应的是0、2、4、6这4个数。之后的并集就不用再说了吧。
结构体解释:typedef struct LNode{ //此行的LNode是一个结构标签 ElemType data; struct LNode *next; }LNode,*LinkList; //此行的LNode是结构体struct LNode的一个别名 //*LinkList也是结构体struct LNode的一个别名 //换言之LinkList是结构体struct LNode类型的指针的别名 //也就是说 struct LNode *p;这条语句等同于LinkList p;使用:p->date
逗号运算符和逗号表达式
3+5,6+8 上式称为逗号表达式。逗号表达式的一般形式为:表达式1,表达式2
逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值
switch的default问题。不同位置结果不同
#include using namespace std; int main() { int a=1,b=2,c=3,d=4,y=10; switch(y){ case 1:a++;break; default:d=1; case 2:b++;break;//b是可以跑进去的 case 4:c++;break; } cout
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?