自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 数组模拟哈希表

哈希表能使数据通过一种映射方式存放到一种范围更小的数据空间中,比如-1e9~1e9, 存放到1e5的空间中, 并且能够快速实现存放和查找的操作,删除的话一般很少,可以看作是一次查找,找到之后打一个标记,即为删除 实现方式 开放寻址法 a为一个整数 b = a%m 把a放在角标为b的数组中,当发生冲突时,即之前有元素已经占据了b这个位置,则向后移动,直至找到一个空位置 注:m为一个质数时,冲突的可能性最小 拉链法 a为一个整数 b = a%m 把a放在角标为b的数组中,当发生冲突时,在b这个位置后面拉一条链

2021-05-26 20:09:55 265

原创 c++面向对象中的多态全解

虚函数 定义:前面有virtual关键字的成员函数就是虚函数, virtual 关键字只用在类定义里的函数声明里,写函数体时不需要 class base{ virtul int get(); }; int base::get(){} 多态的表现形式一 派生类的指针可以赋值给基类指针 通过基类指针调用基类和派生类中的同名虚函数时 若指针指向一个基类对象,那么被调用的是基类的虚函数 若指针指向一个派生类对象,那么被调用的是派生类的虚函数 示例 class CBase{ public: vir

2021-05-19 17:18:08 228

原创 c++面向对象运算符重载

运算符重载 运算符重载的含义:运算符重载,就是对已有的运算符(C++中预定义的运算符)赋予多 重的含义,使同一运算符作用于不同类型的数据时导致不同类型的行为。 目的:扩展C++中提供的运算符的适用范围,使之能作用于对象 运算符重载的形式 运算符重载的实质是函数重载 可以重载为普通函数,也可以重载为成员函数 把含运算符的表达式转换成对运算符函数的调用 把运算符的操作数转换成运算符函数的参数 运算符被多次重载时,根据实参的类型决定调用哪一个运算符 模板 返回值类型 operator 运算符 (形参表){

2021-05-19 12:26:34 231

原创 常量成员函数

如果不希望对象的值被改变,则定义该对象的时候可以在前面加const关键字 class Sample{ private : int value; public: Sample() {} void SetValue(){}; }; const Sample Obj; // 常量对象 Obj.SetValue(); // 错误,常量对象只能使用构造函数,析构函数和有cosnt说明的函数(常量方法) 在类的成员函数后面加上从上图关键字,则该成员函数成为常量成员函数 常量成员函数内部不能改变属性

2021-05-18 14:56:46 221

原创 友元

友元分为友元函数和友元类两种 友元函数:一个类的友元函数可以访问该类的私有成员 示例 class CCar; // 提前声明CCar类,以便后面的CDriver类使用 class CDriver{ public: void ModifyCar( CCar *pCar);// }; class CCar{ private: int price; friend int MOsExpensiveCar( CCar cars[], int total); friend void CDriver

2021-05-18 14:30:21 114

原创 成员对象和封闭类

定义 有成员对象的类叫封闭类 示例 class Ctyre{ // 轮胎类 private: int radius; int width; public: Ctyre(int r, int w): radius(r), width(w){} }; class CEngine{ // 引擎类 }; class CCar{ // 汽车类 private: int price; CTyre tyre; CEngine engine; public: CCar(int p,i

2021-05-18 14:05:15 144

原创 C++面向对象静态成员

静态成员 :在定义前面加了static关键字的成员 例如: class CRectangle{ private: int w, h; static int nTotaArea; // 静态成员变量 static int nTotalNumber; public: CRectangle(int w_, int h_); ~CRectangle(); static void PrintTotal(); // 静态成员函数 } 普通成员变量每个对象各自一份, 静态成员变量一共就一

2021-05-18 13:21:12 162

原创 C++面向对象中的this指针

作用:指向成员函数所作用的对象 非静态成员函数中可以直接使用this来代表指向该函数作用的对象指针 例如: class Complex{ public: double real, imag; void Print(){ cout << real << "," << imag;} Compelx(double r, double i): real(r), iamg(i) { } Compelx AddOne(){ this->real++; /

2021-05-18 12:22:39 139

原创 析构函数

特点 名字和类名相同, 在前面加个‘~’, 没有参数和返回值,一个类最多有一个析构函数 析构函数对象消亡时被自动调用,可以定义析构函数做对象消亡时的善后工作,比如释放内存等 编译器可自动生成析构函数,但是实际上什么都没做 如果定义了析构函数,则编译器不在生成析构函数 析构函数和数组 对象数组生命期结束时,对象数组的每个元素的析构函数都会被调用 class CTest { public : ~Ctest() { cout << "destructor called " << e

2021-05-18 10:28:35 169

原创 构造函数详细介绍

构造函数基本概念 名字和类名相同,可以有参数,不能有返回值 作用是对对象进行初始化,如给成员变量赋值 如果定义类时,没有写构造函数,则编译器生成一个无参的构造函数,不进行任何操作 如果用户自己定义了构造函数,则编译器不再生成构造函数 对象生成时构造函数被调用,对象一旦生成,就再也不在其上执行构造函数了 一个类可以有多个构造函数 重要:有时对象没有 被初始化就被使用会导致程序出错 调用默认构造函数 示例: class Complex{ private: double real, imag; pub

2021-05-18 09:54:05 618

原创 数组模拟并查集

并查集主要能高效实现以下操作 判断两个元素是否属于一个集合 判断某个元素属于哪个集合 数组模拟并查集的思想 数组的角标是当前元素的值,数组存放的值是该角标一元素的父亲节点 利用find()函数递归寻找元素父亲节点的时候,我们将所有元素都指向树的根节点 一道模板题 链接:https://www.acwing.com/problem/content/description/838/ 实现 #include<bits/stdc++.h> using namespace std; const

2021-05-08 13:15:02 137 1

原创 类和对象入门

类成员的可访问范围 下列关键字说明类成员的访问范围 private: 私有成员, 只能在成员函数内访问 public: 公有成员,可以在任何地方访问 protected: 保护成员,以后再说 以上三个关键字出现的次数和顺序没有任何限制 定义一个类 class className{ private: 私有属性和函数 public: 公有属性和函数 protected: 保护属性和函数 }; 如果某个成员前面没有上述关键字,则被缺省地认为是私有成员 例如: class Man{ int n

2021-05-04 17:09:26 122

原创 内联函数,函数重载,函数缺省参数

内联函数 产生背景:函数的调用是有时间开销的, 如果函数本身只有几条语句,执行非常块,而函数被反复执行很多次, 相比较函数调用产生的开销会比较大 作用机制: 将内联函数代码块插入到语句处 举例 inline int Max(int a,int b){ if(a>b) return a; return b; } 函数重载 一个或多个函数名字相同,但是参数个数或参数的类型不相同,叫做函数的重载 例如以下三个函数是重载关系 int Max(double f1,double f2) { } int Ma

2021-05-04 15:50:25 124

原创 动态内存分配

动态内存分配 第一种用法 p = new T; T 是任意类型的名字, p是类型为 T * 的指针 动态分配出一片大小为 sizeof(T) 的内存空间大小,并把起始地址赋给p, 例如 int * pn; pn = new int; * pn = 5; 第二种用法 p = new T[N]; T 为类型名, p 类型为 T* 的指针 N 要分配数组元素的个数,可以是整型表达式 动态分配出一片 N*sizeof(T) 字节的内存空间大小,并把首地址赋给p,例如: int * pn; int i = 5;

2021-05-04 15:21:34 106

原创 const 关键字

const 关键字 定义常量 const int MAX_VAl = 23; const string SCHOOL_NAME = "SCU"; 定义常量指针 不能通过常量指针修改其指向的内容 int n, m; const int *p = &n; *p = 5; // 编译出错 n = 4; // ok p = &m; // ok 不能把常量指针赋值给非常量指针,但是反过来可以 const int *p1; int *p2; p1 = p1; // ok p2 = p

2021-05-04 15:00:34 63

原创 引用

引用的概念 定义方式 类型名 & 引用名 = 变量名 int n = 4; int &r = n; // r引用了n, r的类型是int & 作用 某个变量的引用, 等价于这个变量, 相当于该变量的一个别名 int n = 4; int &r = n; r = 4; cout << r; // 输出4 cout << n; // 输出4 n = 5; cou t << r; // 输出5 注意事项 定义引用时一定要将其初始化

2021-05-04 14:36:25 117

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除