C++
Joker Zxc
这个世界是属于偏执狂的。
展开
-
结构体内存对齐——最直观,最简单的理解方式,一定能看懂。
下面我们来看两个题目:原创 2020-07-16 15:13:54 · 349 阅读 · 1 评论 -
C++——strlen和sizeof
strlen( ):库函数,并且所传入的参数必须是char*,发生在运行时刻strlen( )求得的是字符串的长度,遇到第一个NULL('\0')为止,不包括‘\0’。例如:字符串 arr[20]= {“zhou”};strlen(arr),结果为4。sizeof( ):关键字,发生在编译时刻。sizeof( )计算字符串占的总内存空间。数组情况:字符串 arr[20...原创 2019-08-22 09:45:37 · 268 阅读 · 0 评论 -
C++——vector超详细介绍
vector:vector是表示可变大小数组的序列容器。即动态顺序表。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。相关接口:构造函数:vector() 无参构造 vector(size_type n, const va...原创 2019-08-22 10:50:19 · 1652 阅读 · 0 评论 -
C++——list超详细介绍
list:list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。与其他的序列式容器相比(a...原创 2019-08-22 11:21:41 · 15958 阅读 · 2 评论 -
C++——关联式容器(下)——哈希结构
哈希结构的关联式容器:unordered_map unordered_set unordered_multiset unordered_multimapunordered系列的关联式容器之所以效率比较高,是因为其底层使用了哈希结构。哈希概念:顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为O(...原创 2019-08-17 11:49:04 · 349 阅读 · 0 评论 -
c++——二叉搜索树
关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。键值对:用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值, value表示与key对应的信息。二叉搜索树:二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:...原创 2019-08-17 12:31:30 · 367 阅读 · 0 评论 -
C++——容器适配器:stack/queue/priority_queue
stack:栈概念:stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行 元素的插入与提取操作。 先进后出。stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类。这些容器类应该支持以下操作:empty:判空操作 back:获取尾部元素操作 push_back:尾部插入元素操作 pop_back:尾部删除元素操...原创 2019-08-22 14:51:19 · 318 阅读 · 0 评论 -
C++——关联式容器(上)——树形结构
关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在 数据检索时比序列式容器效率更高。键值对:用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key对应的信息。比如:现在要建立一个英汉互译的字典,那该字典中必然有英文单词与其对应的中文含义,而且,英文单词...原创 2019-08-23 12:33:35 · 377 阅读 · 0 评论 -
C++——AVL树超详细介绍
AVL树:二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年 发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之 差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高...原创 2019-08-23 14:22:25 · 863 阅读 · 1 评论 -
C++——红黑树超详细讲解~~~~
红黑树:红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。红黑树的性质:每个结点不是红色就是黑色。 根节点是黑色的。 如果一个节点是红色的,则它的两个孩子结点是黑色的。 对于每个结点,从该结点到其所有后代叶结点...原创 2019-11-23 08:53:48 · 2018 阅读 · 1 评论 -
C和C++的区别详解(拓展串讲)以及C++总复习(面经问题)
本文的重点是C++面经问题和串讲复习,C和C++的区别,可以参考看看,个人见解。问题:简述C和C++的区别?C++是面向对象的;C是面向过程的面向过程:完成一件事情,按照步骤一步步的实现。做饭举例:要先买菜,洗菜,切菜,炒菜。一步步完成面向对象:将不同的事物都看成一个对象,依靠对象之间的相互联系,相互操作,完成一定的功能。做饭举例:菜、刀、锅。这都是对象,对象之间相互作用,相互联系...原创 2019-09-21 08:42:47 · 791 阅读 · 0 评论 -
C++98中的空值nullptr
平时我们所用的空值是:NULL;在传统的C头文件(stddef.h)中,可以看到如下代码:#ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif #endif NULL可能被定义为字面常量0,或者被定义为无类型指针(void*)的常量。下面就会引起一...原创 2019-09-19 07:32:52 · 678 阅读 · 0 评论 -
C++常用关键字总结
C++98的关键字:单个详解:(从a~z排序解释)asmasm:是语句分隔符,后面大括号其中放汇编指令。_asm { MOV a,1 MOV b,2 ADD c,a,b} auto 这里只说明C++11的新定义。C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编...原创 2019-09-27 08:47:13 · 2075 阅读 · 0 评论 -
Head First设计模式学习笔记(一)——策略模式
Head First设计模式一开始为我们介绍了一个案例:设计鸭子问题。这是书中的思路:仔细思考,这极其可能是我们解决问题是,作为新手所采用的思路。它这里提出:设计原则一:把尽可能的所有的要变化的东西封装在一起,不变化的封装一起。它主要的思路是:把需要变化的东西,拿出来进行变化,不需要的稳定分开,不会影响以后的维护。这是所有设计模式的精神所在。继续看鸭子问题,以这个思路继续!...原创 2019-12-29 19:13:17 · 262 阅读 · 0 评论 -
C++——浅拷贝、深拷贝、写时拷贝的清楚讲解
浅拷贝:在拷贝构造的时候,直接将原内容的地址交给要拷贝的类,两个类共同指向一片空间。最终导致的问题是,s1、s2共用同一块内存空间,在释放时同一块 空间被释放多次而引起程序崩溃,这种拷贝方式,称为浅拷贝。浅拷贝:也称位拷贝,编译器只是将对象中的值拷贝过来。深拷贝:通过开辟和源空间大小相同的空间并将内容拷贝下来再进行操作。不论是否对s2进行操作,都会拷贝一片相同大小的空间以及内容...原创 2019-08-22 09:31:10 · 230 阅读 · 0 评论 -
C++——vector和list的比较
vector list 底 层 结 构 动态顺序表,一段连续空间。 带头结点的双向循环链表。 随 机 访 问 支持随机访问,访问某个元素效率O(1) 不支持随机访问,访问某个元素 效率O(N)。 插入和删除 任意位置插入和删除效率低,需要搬移元素,时间复...原创 2019-08-16 19:45:02 · 892 阅读 · 1 评论 -
C++——模拟实现String类
#pragma once#include<assert.h>#include <string>#include<iostream>using namespace std;namespace MyString { class String { public: typedef char* Iterator; //迭代器 Iterat...原创 2019-08-21 16:51:57 · 312 阅读 · 0 评论 -
C++——类和对象(3)——构造函数、析构函数、拷贝构造函数
构造函数:初始化类对象构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。注:构造函数是特殊的成员函数,需要注意的是,构造函数的虽然名称叫构造,但是需要注意的是构造函数的主要任务并不是开空间创建对象,而是初始化对象(即初始化成员变量)。而对象的空间在函数运行时的栈空间里,由编译器提供的。类...原创 2019-05-13 21:28:42 · 275 阅读 · 0 评论 -
C++——类和对象(4)--运算符的重载、const成员函数
运算符的重载运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。重载方式:函数名字为:operator 运算符符号<需要重载的运算符符号>函数原型:返回值类型 operator操作符(参数列表) int operator==(<参数>) //如果一个函数的返回值类型是类类型对象的...原创 2019-05-16 19:53:27 · 358 阅读 · 0 评论 -
C++——函数重载
函数重载函数名相同,函数的参数列表(函数个数 或 类型 或 顺序)必须不同,常用于处理数据类型不同的问题。注:C语言中没有函数重载,会是函数重定义的错误。//函数重载int Add(int left, int right) { return left + right; } ...原创 2019-05-14 16:36:22 · 171 阅读 · 0 评论 -
C++——入门(1)——命名空间、引用、缺省参数、传值/传地址/传引用
关键字63个关键字命名空间作用:解决命名冲突定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员---1.其中既可以放变量也可以放函数、2.命名空间可以嵌套、3.同一个工程中允许存在多个相同名称的命名空间,编译器后会合成同一个命名空间中。命名空间的使用:N1::a 等等 (命名空间的名字::...原创 2019-05-07 19:40:03 · 388 阅读 · 0 评论 -
C++——入门(2)——内联函数、auto关键字、指针空值nullptr
内联函数:函数之前加 inline 关键字概念:以 inline 修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销(函数栈帧问题),内联函数提升程序运行的效率。特性:inline是一种以空间换时间的做法,省去调用函数栈帧的开销。所以代码很长或者有循环/递归的函数不适宜使用作为内联函数。 inline对于编译器而言只是一个建议,编译器会自动...原创 2019-05-07 20:33:14 · 378 阅读 · 0 评论 -
C++——类和对象(1)——类的定义、类的访问限定符
类与对象C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。类的引入C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量(叫做成员变量),也可以定义函数(叫做成员函数)。类的定义:class className { // ...原创 2019-05-07 21:39:55 · 526 阅读 · 0 评论 -
C++——模板(函数模板、类模板)
函数模板函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。模板格式:template<typename T1, typename T2,......,typename Tn>返回值类型 函数名(参数列表){}template<typename T> void Swap( T& left...原创 2019-05-20 20:26:57 · 209 阅读 · 0 评论 -
C++——String类超详细介绍
STL的含义:标准模板库STL的内容:容器:数据的仓库 算法:与数据结构相关的算法、通用的算法(和数据结构无关)注:熟悉常用的算法 sort reverse迭代器:算法和容器的连接 适配器:类似于转接线,苹果线要连接安卓线容器:序列式容器(线性结构)string:array:C11静态顺序表vector:动态顺序表list:带头节点的双向循环链表...原创 2019-06-01 17:32:56 · 63546 阅读 · 22 评论 -
C++——动态内存管理__C动态管理、new、delete
动态内存管理C++中 malloc不调用构造函数,free 不调用析构函数。因此对象的资源依旧存在,只是对内存的空间进行申请,释放的。所以C++有自己的内存管理——new,delete。从而申请释放空间。申请的地址空间(new,malloc申请那样)就在堆那里。局部变量就在栈那里。局部变量的值在代码段。例子:char a[]="asdf"; char a[]:...原创 2019-05-21 21:15:16 · 331 阅读 · 0 评论 -
C++中string类字符串和数字的转换
C++中 string类字符串和数字的转化有简便方法:头文件 <sstream> 中有两个类:istringstream——字符串输入流 ostringstream——字符串输出流能够很便捷的实现string类字符串和数字的转换。同时要用到 >> 和 <<>> 从输入流读取一个string。 << 把一个str...原创 2019-06-01 17:52:02 · 2760 阅读 · 0 评论 -
malloc/free 和 new/delete 的区别
malloc/free和new/delete的共同点是:都是从堆上申请空间,并且需要用户手动释放。不同的地方是: 1. malloc和free是函数,new和delete是操作符。2. malloc申请的空间不会初始化,new可以初始化。3. malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可。4. malloc的返回值为void...原创 2019-06-05 13:30:12 · 342 阅读 · 0 评论 -
C++——继承
继承:龙生龙,凤生凤,老鼠儿子会打洞。sizeof可以验证继承了基类中的所有成员变量public 的继承方式,结合子类对象对基类成员函数的调用,可以得到子类对基类的成员函数继承(所有资源都被继承。基类中public成员在子类中权限也是public。)#include<iostream>using namespace std;class Base { //父类pu...原创 2019-07-16 10:14:14 · 797 阅读 · 0 评论 -
C++——多态
多态:具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。多态的构成条件:必须通过基类的指针或者引用调用虚函数 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写虚函数:多态是实现是依赖于虚函数来实现的,之所以虚函数可以分清楚当前调用的函数是基类的还是派生类的,主要在于基类和派生类分别有着自己的虚函数表,再调用虚函数时,它们是通过去虚函数表去对应的函数的...原创 2019-08-01 10:43:39 · 118 阅读 · 0 评论 -
C++——智能指针
智能指针的目的:解决内存泄漏和指针悬挂。内存泄漏:不再使用的内存没有得到释放。悬挂指针:悬挂指针也叫野指针,是未初始化或未清零的指针。与空指针(NULL)不同,悬挂指针无法通过简单地判断是否为 NULL避免,而只能通过养成良好的编程习惯来尽力减少。悬挂指针的成因主要有两种:指针变量没有被初始化,任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指...原创 2019-08-09 14:30:30 · 289 阅读 · 0 评论 -
C++——类和对象(2)——封装、作用域
封装:封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。使用protected/private把成员封装起来。开放一些共有的成员函数对成员合理的访问,所以封装本质是一种管理。类的作用域:类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员,需要使用 :: 作用域解析符指明成员属于哪个类域。 class...原创 2019-05-08 21:31:48 · 191 阅读 · 0 评论