
C++
文章平均质量分 92
托马斯.杨
这个作者很懒,什么都没留下…
展开
-
红黑树
1.概念:红黑树是一种近似平衡的二叉搜索树,在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。2.性质:1.每个节点不是红色就是黑色;2.根节点是黑色;3.叶子节点(NULL节点)是黑色的;4.红色节点的两个孩子必须是黑色的;5.对于每个节点,从该节点出发到叶子节点所有路径上的黑色节点数相等。因为要满足红黑树的这五条性质,如果我们插入的是黑色节点就一定会原创 2020-10-08 18:18:11 · 323 阅读 · 0 评论 -
浅拷贝,深拷贝和写时拷贝对比
一、浅拷贝也称位拷贝,编译器只是将对象中的值采用基本类型值复制的方式拷贝过来,如果对象中管理资源,最后就会导致多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该资源已经被释放, 以为还有效,所以当继续对资源进行操作时,就会发生访问违规。当类里面有指针对象时,拷贝构造和赋值运算符重载只进行值拷贝,两个对象共用同一块空间,对象销毁时程序会发生内存访问违规...原创 2020-06-02 19:38:11 · 256 阅读 · 0 评论 -
C++中const和非const对象分别调用const和非const成员函数
一、先来提出问题const对象可以调用非const成员函数吗?非const对象可以调用const成员函数吗?const成员函数内可以调用其它的非const成员函数吗?非const成员函数内可以调用其他的const成员函数吗?二、实践出真知实践发现:1、const对象可以调用const成员函数2、const对象不能调用非const成员函数3、非const对象可以调用const成员函数4、非const对象可以调用非const成员函数5、const成员函数不能调用非const成员函数原创 2020-06-01 18:15:01 · 5696 阅读 · 0 评论 -
我的C++项目----文件加密工具
文件加密工具1、对称加密:1976年以前所有的加密方式都是:甲采用一种加密方式对信息进行加密,乙采用同一种规则对信息进行解密。但是这样一来,有一个极大的缺陷,就是乙要进行解密工作,甲就得告诉乙解密规则,否则无法解密。保存和传递这个规则就成了最大的难题。2、非对称加密:乙方生成两把秘钥(公钥和私钥),公钥是公开的,任何人都可以获取。私钥是保密的,只有乙知道。甲方获取到公钥,然后对...原创 2020-04-24 07:37:27 · 603 阅读 · 0 评论 -
快速排序(C++版)
1.快速排序基本思想快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中 的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右 子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。将区间按照基准值划分为左右两半部分的常见方式有:前后指针版本挖坑法hoa......原创 2020-04-14 16:30:46 · 388 阅读 · 0 评论 -
我的项目--Automatic CloudBcakup
asdfg原创 2020-04-10 15:42:39 · 318 阅读 · 0 评论 -
我的项目---文件加密算法RSA
一、RSA算法基本原理1、RSA的由来1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人 的名字命名,叫做RSA算法。直到现在,RSA算法一直是最广为使用的"非对称加密算法"。毫不夸张地说,只要有计 算机网络的地方,就有RSA算法。2、RSA的加/解密方式公钥(e,n),私钥(d,n)加密:密文 = (明...原创 2020-04-09 16:56:22 · 844 阅读 · 1 评论 -
C++中的关键字 try throw catch
这三个关键字通常是c++在处理异常时使用的try :try块中的代码通过throw抛出异常,再通过catch捕获这个异常。throw : 抛出异常 。catch :捕获throw抛出的异常。例如以下语句:try { throw XXX; } catch (T1& e) { cout << "error1" <<endl; } ca...原创 2019-11-13 11:13:03 · 931 阅读 · 0 评论 -
C++继承(继承性)---抽象类 虚表
一、抽象类纯虚函数:在虚函数的后面写上 = 0 ,且不实现这个函数,则这个函数为纯虚函数。抽象类:包含纯虚函数的类叫做抽象类(也叫接口类)。1.抽象类不能实例化出对象,派生类继承后也不能实例化出对象。2.只有重写纯虚函数,派生类才能实例化出对象。3. 纯虚函数规范了派生类必须重写,另外纯虚函数更体现出了接口继承。class Base //抽象类{public: virtual...原创 2019-11-01 22:22:48 · 921 阅读 · 0 评论 -
C++继承(多态性)---隐藏 重写 重载
一、隐藏在继承体系中基类和派生类都有独立的作用域。子类和父类中有同名成员或函数(非虚函数),子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏,也叫重定义。(在子类成员函数中,可以使用 基类::基类成员显示访问)需要注意的是如果是成员函数的隐藏,只需要函数名相同就构成隐藏。class Base //基类{public: int m_a;//重名成员变量 Base() :...原创 2019-10-31 17:37:21 · 648 阅读 · 0 评论 -
C++继承 (继承性)
继承作为c++三大特性之一(继承,多态,封装),呈现了面向对象程序设计的层次结构,是面向对象程序设计使代码可以复用的最重要的手段。1.继承和派生的先后执行顺序#include<iostream>using namespace std;class Base{public: int m_B_a; Base(int a): m_B_a(a) { cout <&l...原创 2019-10-23 20:40:43 · 623 阅读 · 2 评论 -
C++中的I/O流
一、C语言的输入与输出C语言中我们用到最频繁的输入输出方式就是scanf()和printf()。scanf() :从标准的输入设备(键盘)读取数据到变量中。printf() :将指定的数据输出到标准输出设备(屏幕)。C语言借助了相应的缓冲区来进行输入与输出:对缓冲区的理解:1.可以屏蔽掉低级I/O的实现,低级I/O的实现依赖于操作系统本生内核的实现,所以如果能够屏蔽掉这部分的差...原创 2019-10-23 17:04:32 · 519 阅读 · 1 评论 -
C++中sstream使用
asda原创 2019-10-23 16:30:30 · 845 阅读 · 0 评论 -
C++中fstream使用
生的伟大原创 2019-10-23 15:45:04 · 1204 阅读 · 1 评论 -
C语言和C++中的static的用法及区别
一、在修饰变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。二、static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。三、static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static修饰的局部变量存放在全局数据区的静态变量区。初始...原创 2019-02-17 11:06:38 · 434 阅读 · 1 评论 -
C++中的模板类分离编译问题及解决方案
在一些较大的c++文件中,我们习惯上将类的定义,函数的定义,宏等等东西放在.h文件中,而他们的的具体实现工程放在.cpp文件中。如下图:但是在实现模板类的过程中,使用这样的方式就会出现很多不必要的问题。...原创 2019-10-20 21:42:25 · 2892 阅读 · 0 评论 -
C++中的模板特化及函数模板特化和函数重载的对比
一、模板特化介绍template<class T1,class T2>class Test{private: T1 m_a; T2 m_b;public: Test() { cout << "T1 T2" << endl; }};上面是一段普通模板类的代码1.1全特化template<>//全特化template...原创 2019-10-20 20:59:51 · 957 阅读 · 2 评论 -
C++中的非类型模板参数
template<class T>template<class T,size_t N = 10>上面第一行代码是我们常见的模板,而第二行就是模板中的N就是非类型模板参数#include<iostream>using namespace std;template<class T,size_t N = 10>//非类型模板参数class ...原创 2019-10-20 20:24:45 · 498 阅读 · 0 评论 -
C++二维vector往进push_back数据时的错误
#include<iostream>#include<vector>//引头文件using namespace std方式1vector<vector<int >> v;v[0][0] = 1;cout<< v[0][0]<<endl;方式2for (int i = 0; i < 4; i++) ...原创 2019-10-12 22:33:22 · 3623 阅读 · 1 评论 -
C++中的缺省参数
缺省参数概念缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默 认值,否则使用指定的实参。void fun(int a = 0) { cout << a << endl; } int main(){ fun(); fun(10); system("pause"); return 0;...原创 2019-08-26 15:45:33 · 422 阅读 · 0 评论 -
C++中的函数重载和运算符重载
函数重载概念函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形 参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题int add(int a, int b){ return a + b;}double add(double a, double b){ return a + b;}int ...原创 2019-08-26 16:20:05 · 781 阅读 · 0 评论 -
C++中的引用(&)
一.引用概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间比如说:我的名字叫蔡徐坤,但大家都叫我坤坤,所以坤坤是我的一个别名,也就是我的引用。int main(){ int CaiXuKun = 100; int &KunKun = CaiXuKun; cout << "CaiXuKu...原创 2019-08-26 17:33:28 · 385 阅读 · 0 评论 -
C++关键字inline
1.概念以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销, 内联函数提升程序运行的效率。 inline int Add(int a, int b) { int c = a + b; return c;}int main(){ int ret = Add(2, 4); return 0;}...原创 2019-08-26 20:39:47 · 162 阅读 · 0 评论 -
C++关键字auto
inline是一种以空间换时间的做法,省去调用函数额开销。所以代码很长或者有循环/递归的函数不适宜使 用作为内联函数。 2. inline对于编译器而言只是一个建议,编译器会自动优化,如果定义为inline的函数体内有循环/递归等 等,编译器优化时会忽略掉内联。 3. inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找 不到。...原创 2019-09-14 14:25:58 · 237 阅读 · 0 评论 -
C++中的iterator(迭代器)失效
一、iterator的介绍iterator(迭代器)就是c++中被用来访问一个容器类的所包函的全部元素,其行为像一个指针。 string Str("hello"); string::iterator ps; for (ps = Str.begin(); ps != Str.end(); ps++) //begin()函数返回值为Str串的首地址。 { cout <<...原创 2019-09-26 17:38:58 · 572 阅读 · 0 评论 -
C++中的关键字namespace
namespace名字空间namespace 汉语意思就是名字空间,下面两行代码中是我们最常见出现过namespace的地方,可是,它这个关键字使用来干什么的呢?下面请听我细细道来:#include<iostream>using namespace std;规则1:名字空间可以解决函数重复、全局变量名重复的问题。包在不同名字空间里的重复函数实际上是两个完全的不同的函数。规...原创 2019-08-26 15:16:12 · 869 阅读 · 0 评论