c++和数据结构基础

记录平时不怎么注意的基础概念,陆陆续续会记笔记


1.堆和树
如果一棵二叉树的每一个节点都带着一个值,且父亲的值总是比儿子的值要大,我们称这棵树为大顶二叉堆,如果是父亲比儿子都要小,那就是小顶二叉堆,统称为二叉堆。(其实一般都把二叉两个字省略掉,毕竟通常说的堆都是二叉堆,然而堆不止二叉堆)。这一个良好的性质注定了堆可以用来当作优先队列使用。

堆是特殊的树,注意与二叉排序树(左子树的节点值一定小于父节点,右子树的节点值一定大于父节点)的对比
常说的堆是小顶堆

堆排序从最后一个非叶子结点开始

2.weak_ptr
首先我们明确shared_ptr的用法,是基于引用计数的。看上去挺好的,但是存在循环引用的问题,所以随之而来的就是引入了weak_ptr,weak_ptr是为了配合shared_ptr而生,且它只能由shared_ptr或者weak_ptr创建而来,不会增加引用计数
原理:不论是否有weak_ptr指向,一旦最后一个指向对象的shared_ptr被销毁,对象就会被释放。(如果是循环引用的情况,即使最后一个指向对象的shared_ptr被销毁,引用计数也不会减为0,所以对象得不到释放,引入weak_ptr之后得到解决)

3.static修饰
static修饰局部变量,这个局部变量依旧是超出作用域就没办法访问了,但是并没有销毁,依旧存在于内存中,偶尔会用于函数需要返回指针或者引用的时候
static全局变量,限定变量在一个编译单元内,也就是只在某个.h或者某个.cpp文件中才可以访问
static 修饰普通函数,这个和上一个修饰变量基本类似
static修饰成员变量,代表这个成员变量是属于整个类的,也就是属于这个类的所有对象。如果某个对象改变了它的值,那么另外的对象也能顺利读取到改变后的值
static 修饰成员函数,代表函数属于整个类,只能访问static成员变量和其他static成员函数。这里值得注意的一点是static和const不能同时修饰同一个成员函数,因为static成员函数是没有this指针的,因为并不是属于对象。而const的实现方式则是用一个const this指针是调用

4.多态和虚函数
多态实现的条件,1.虚函数,2,一个基类指针或者引用指向派生类对象
具体过程如下
基类指针在调用成员虚函数的时候,就会查找该对象(子类对象)的虚函数表,虚函数表的地址在每个对象的首地址。查找该虚函数表中该函数的指针进行调用。
PS:每个对象中保存的只是一个指向虚函数表的指针每个类维护有一个虚函数表(不是每个对象一个虚函数表),该类的所有对象都有一个指针指向这个虚函数表
虚函数表在生成的时候,如果子类有覆盖基类的虚函数,那么就会直接覆盖掉基类的虚函数

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值