![](https://img-blog.csdnimg.cn/20200127223822553.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++
实干成就非凡
云疏不知数
一个人知道自己为了什么而活,他就能够忍受任何一种生活----尼采
展开
-
C++内存区划分
原创 2020-10-05 12:45:02 · 110 阅读 · 0 评论 -
C、C++编译执行全过程
原创 2020-10-05 12:44:15 · 167 阅读 · 0 评论 -
static用法总结
原创 2020-10-05 12:42:38 · 102 阅读 · 0 评论 -
ASCII
直接上表格ASCII字符集是采用8位有符号整数的正数部分表示,取值范围是[0, 127]1Bin(二进制)Oct(八进制)Dec(十进制)Hex(十六进制)缩写/字符 |解释|0000 00000000x00NUL(null)0000 00010110x01SOH(start of headline)0000 00100220x02STX (start of text)0000 00110330x03ETX (end of te.原创 2020-09-09 20:34:21 · 349 阅读 · 0 评论 -
换行符CR,LF和CRLF
废话少说直接上表格换行符英文全称ASCII编码符号ASCII编码值用途CRCarriage Return\r 表示回车13MacIntosh操作系统(即早期的Mac操作系统)采用单个字符CR来进行换行LFLinefeed\n 转义字符表示换行10Unix/Linux/Mac OS X操作系统采用单个字符LF来进行换行CRLFCarriage Return & Linefeed\r\n 表示回车并换行NULLWindows操作系统采用两.原创 2020-09-09 19:55:33 · 2150 阅读 · 0 评论 -
36.C++类型转换
C语言中的类型转换:隐式类型转化:由编译器在编译阶段自动进行,能转就转,不能转就编译失败显式类型转化:需要用户自己处理// 隐式类型转换int i = 1;double d = i;// 显示的强制类型转换int* p = &i;int address = (int) p;c语言的类型转换存在精度丢失和类型混用强转的情况,因此C ++,引入了四种命名的强制类型转...原创 2020-04-27 11:33:42 · 145 阅读 · 0 评论 -
35.特殊类设计
1.要求设计一个类,允许其只能在堆上创建(1).将构造方法声明为私有(2).将构造方法delete(C++11标准才支持),但是如果delete之后new也是不能正常创建对象的,所以此方法是错误的。#include using namespace std;class Test{public: static Test* CreateInstance() //要在堆上实例化...原创 2020-04-25 17:36:56 · 213 阅读 · 0 评论 -
34.异常 throw和try-catch
C++ 提供了一系列标准的异常,我们可以在程序中使用这些标准的异常。在定义中,它们是以父子类层次结构组织起来的 异常 描述 std::exception 该异常是所有标准C++异常的父类 ...原创 2020-04-24 16:27:04 · 327 阅读 · 0 评论 -
33.C++11
1.C++的发展过程和历史C++11较C++98的新特性:2.列表初始化3.变量类型推导4.范围for循环5.final与override6.智能指针7.新增加容器—静态数组array、forward_list以及unordered系列8.默认成员函数控制9.右值引用10.lambda表达式11.线程库1.C++的发展过程和历史C++语言发展大概可以...原创 2020-04-24 08:49:45 · 1445 阅读 · 0 评论 -
32.布隆过滤器
用哈希表存储用户记录,缺点:浪费空间,用位图存储用户记录,缺点:不能处理哈希冲突。因此,将哈希与位图结合,即布隆过滤器布隆过滤器概念布隆过滤器是由布隆(Burton Howard Bloom)在1970年提出的 一种紧凑型的、比较巧妙的概率型数据结构,特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”,它是用多个哈希函数,将一个数据映射到位图结构中。此种方式不仅可...原创 2020-04-24 08:49:10 · 168 阅读 · 0 评论 -
31.位图bitset
位图概念所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的使用方式:#include #include using namespace std;int main() { bitset<10> bt; cout << bt << endl; cout <<"size:"<...原创 2020-04-24 08:48:38 · 183 阅读 · 0 评论 -
30.模拟实现hashtable
模拟实现hashtable闭散列法:线性探测法 #include <iostream>#include <vector>using namespace std;/*newHt????负载(载荷)因子:_size * 10 / _ht.capacity() >= 7容量以素数增容的原因?*//*采用闭散列处理哈希冲突时,不能随便物理...原创 2020-04-24 08:47:37 · 150 阅读 · 0 评论 -
29.认识哈希
哈希概念哈希函数:通过键值计算存储位置的函数哈希函数的设计原则:(1)哈希函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有m个地址时,其值域必须在0到m-1之间(2)哈希函数计算出来的地址能均匀分布在整个空间中(3)哈希函数应该比较简单插入元素:根据待插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存放。搜索元素:对元素的关键码进行同...原创 2020-03-24 20:46:00 · 419 阅读 · 0 评论 -
28.hashtable实现的容器:hash_set, hash_multiset, hash_map, hash_multimap
C++11中:set, map, mulitset, multimap都是红黑树unordered系列容器底层都是哈希实现(hashtable)在C++早些版本中:hash_set, hash_multiset, hash_map, hash_multimap的底层实现也都是哈希结构(hashtable),并且C++11也支持它们虽然STL只规范复杂度与接口,并不规范实现方法,但S...原创 2020-03-24 20:45:35 · 218 阅读 · 0 评论 -
27.map,multimap及unordered_map, unordered_multimap
1.map2.multimap3.unordered_map4.unordered_multimapmapmap特点1.map支持下标访问符,即在[]中放入key,就可以找到与key对应的value2.map通常被实现为二叉搜索树(更准确的说:平衡二叉搜索树(红黑树)3.键的值相同的元素不能重复map<string, size_t> people4...原创 2020-03-24 20:42:03 · 900 阅读 · 1 评论 -
26.set,multiset 及 unordered_set,unordered_multiset
1.set2.multiset 3.unordered_set4.unordered_multiset关联式容器关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是'<'key, value'>'结构的键值对,在数据检索时比序列式容器效率更高。STL中的部分容器,比如:vector、list、deque、forward_list(C++1...原创 2020-03-24 20:41:31 · 507 阅读 · 0 评论 -
24.AVL树
原创 2020-03-24 20:41:07 · 164 阅读 · 0 评论 -
23.动静态绑定,二叉搜索树
静态绑定又称为前期绑定(早绑定),在程序编译期间确定了程序的行为,也称为静态多态,比如:函数重载动态绑定又称后期绑定(晚绑定),是在程序运行期间,根据具体拿到的类型确定程序的具体行为,调用具体的函数,也称为动态多态// //动态绑定//抽象类 --> 定义接口cl...原创 2020-03-24 20:39:59 · 173 阅读 · 0 评论 -
22(2).虚函数重写的例外之协变与析构函数重写 及 override 和 final关键字
虚函数重写的两个例外:协变(基类与派生类虚函数返回值类型不同)派生类重写基类虚函数时,与基类虚函数返回值类型不同。即基类虚函数返回基类对象的指针或者引用,派生类虚函数返回派生类对象的指针或者引用时,称为协变析构函数的重写(基类与派生类析构函数的名字不同)如果基类的析构函数为虚函数,此时派生类析构函数只要定义,无论是否加virtual关键字,都与基类的析构函数构成重写,虽然基...原创 2019-12-14 15:03:43 · 1468 阅读 · 0 评论 -
22(1).虚函数表(多态的原理)
虚函数表即多态的原理覆盖和隐藏只是表象,实际是通过虚函数表来实现的(联想到虚基类的继承中的虚基表)//查看虚函数的内容class Base{public: Base() { base_data = 10; }public: virtual void fun() { cout<<"This is Base::fun()"<<en...原创 2019-12-14 15:01:51 · 149 阅读 · 0 评论 -
21(6). 赋值兼容规则与抽象类
赋值兼容规则(基类和派生类对象赋值转换)1.派生类对象直接赋值给基类对象2.派生类对象的地址可以直接给基类对象的指针赋值3.派生类对象直接赋值给基类的引用对象赋值//覆盖(重写)class A{public: virtual void Eat() { cout<<"A::Eat()"<<endl; //?????? } virtual vo...原创 2019-12-14 14:59:34 · 191 阅读 · 0 评论 -
21(5).多态:重载,覆盖(重写)和隐藏(重定义)
多态关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。 这种技 术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚 函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。重载 重写 重定义重载两个函数在同一作用域, 函数名必...原创 2019-12-14 14:58:30 · 165 阅读 · 0 评论 -
21(4).组合与继承(has_a / is_a)
has_a / is_a has_a组合,黑箱(彼此之间互不敢干涉),降低耦合度is_a继承,白箱//is_a 是一种 继承class A{public: void Eat() {} void Foot() {} void Sleep() {}};class Person : public A{};class Dog : pub...原创 2019-12-14 14:57:51 · 141 阅读 · 0 评论 -
21(3).菱形继承(钻石继承) 引入虚拟继承
菱形继承(钻石继承) 虚拟继承virtual//菱形继承(钻石继承) wrong exampleclass Base{public: int base_data;};class A : virtual public Base{public: int a_data;};class B : virtual public Base{public: int ...原创 2019-12-14 14:56:59 · 139 阅读 · 0 评论 -
21(2).继承与友元
继承与友元引入: 友元关系不能继承,也就是说基类友元不能访问子类私有和保护成员,在有些情况下会有基类友元不能访问子类私有和保护成员这样的需求.于是就有如下实现方式 ://继承与友元example (1)class Student;class Person{public: friend void Display(const Person& p, const Stu...原创 2019-12-14 14:53:32 · 367 阅读 · 0 评论 -
21.(1)继承 与继承中的static数据成员
继承后,构造派生类对象时,会先构造基类(多继承中,按继承基类的顺序来构造)当派生类继承了基类后,构造派生类的对象时会首先构造基类对象,多继承中,按派生类继承基类的顺序来构造,析构过程按构造的反向顺序析构class A{public: A() { cout << "A::A()" << endl; } ~A() { cout &l...原创 2019-12-14 14:52:43 · 170 阅读 · 0 评论 -
19.继承(public, private, protected继承)(单继承,多继承)
面向对象抽象封装继承 代码复用,一种类层次的复用,复用不可能完完全全一样的拿过来复用,而最主要为了多态派生类 : 基类子类 : 父类无法继承构造析构方法(子类无法决定父类的生亡)构造一个子类对象: 先构造父类,再构造子类继承都继承了私有成员只不过访问权限不同公有继承派生类可访问基类公有和保护成员派生类的对象只能访问基类的公有成员...原创 2019-12-14 14:39:45 · 190 阅读 · 0 评论 -
18.C++的IO流
standard_in and standard_out- standard_in (key_board) - standard_out (screen)C和C++输入输出的比较#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<string>#include<fstream>...原创 2019-12-14 14:35:08 · 124 阅读 · 0 评论 -
17.模板进阶
模板参数类型形参(由class和typename限定的 )和非类型形参 非类型参数只能是int 类型参数 template<typename Type>Type Max(Type a, Type b){ return a>b ? a : b; } 非类型参数 inttemplate<typename Type, in...原创 2019-11-19 15:33:55 · 300 阅读 · 0 评论 -
6.动态内存管理函数new和delete深究(一定要严谨)
一还是拿运算符重载中的模拟String类运算符重载来说事 参考:剖析构造函数和动态内存开辟函数new和delete剖析构造函数和动态内存开辟函数new和delete#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<assert.h>#include<string.h>using ...原创 2019-10-31 18:00:04 · 228 阅读 · 0 评论 -
5.命令行参数(main函数的两个参数argc和argv)
main( int argc, char *argv[])第一个参数是整形,第二个参数是指向字符的指针数组特别的:argv[0]为自身运行目录路径和程序名, argv[1]指向第一个参数, argv[2]指向第二个参数首先arg是单词arguments(参数)的缩写argc是argument counter(参数计数器)的缩写argv是argument vector(参数矢量)的...原创 2019-10-31 17:44:15 · 915 阅读 · 0 评论 -
4.运算符重载,explicit关键字和哑成员
一短整形运算符重载//短整形运算符重载#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <string.h>using namespace std;class Int{public: Int(long i = 0) : m_i(i) {} Int(const Int& x)...原创 2019-10-31 17:37:07 · 253 阅读 · 0 评论 -
3.剖析构造函数和动态内存开辟函数new和delete
一通过string类模拟实现剖析构造函数①string类模拟实现//string类模拟实现#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <string.h>using namespace std;class String{public: String() { //m_data...原创 2019-10-27 15:15:03 · 325 阅读 · 0 评论 -
2.友元函数及运算符重载,输出流重载为友元函数
一输出流函数重载为成员方法以及全局函数①以下输出流重载为成员方法虽然解决了this指针抢占第一个参数的问题,但方法的调用必须用对象去驱动如下:t1 << cout ;或t1 << cout << endl;这种输出流重载为成员方法不符合人的使用习惯所以摒弃//输出流函数重载------>输出流函数重载为成员方法#include <...原创 2019-10-27 13:07:10 · 1908 阅读 · 0 评论 -
1.C++知识体系的建立
来自个人有道云的学习笔记:文档:C++知识体系的建立.note链接:http://note.youdao.com/noteshare?id=254e7ed358ee5c66016b611840c13fed&sub=F22E174C9E91468AB8555755D3E5550CC语言是面向过程的语言,数据和方法是抽离的,处于用方法去操作数据的阶段C++是一门非完全面向对象的语言C...原创 2019-10-25 22:36:33 · 393 阅读 · 0 评论