![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 86
PaPeR ..
不爱健身的hiphop码农不是一个潮流的好科学家
展开
-
二叉搜索树
a. 从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。二叉搜索树:一棵二叉树,可以为空;b. 树不空,按二叉搜索树性质查找插入位置,插入新节点。b. 最多查找高度次,走到到空,还没找到,这个值不存在。a. 树为空,则直接新增节点,赋值给root指针。若它的左子树不为空,则左子树的值小于根结点。若它的右子树不为空,则右子树的值大于根结点。它的左右子树也分别是搜索二叉树。原创 2024-08-06 11:52:47 · 237 阅读 · 0 评论 -
多态
多态是在不同继承关系的类对象,去调用同一函数,产生不同行为必须通过基类的指针或者对象调用虚函数被调用的函数必须是虚函数,切派生类必须对基类的虚函数进行重写virtual只能修饰类中非静态成员函数。原创 2024-07-11 19:36:42 · 1108 阅读 · 16 评论 -
继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。public:protected:protected:基类private成员在派生类中无论以什么方式继承都是不可见的。原创 2024-07-10 22:42:44 · 795 阅读 · 15 评论 -
模版进阶
通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结果,模版特化函数可以比较基本类型、日期类等,但对于指针的比较,模版函数只能比较指针本身,而不能比较指针所指向的内容,所以这时需要在原模版类的基础上,针对特殊类型所进行特殊化处理。函数形参表: 必须要和模板函数的基础参数类型完全相同,如果不同编译器可能会报一些奇怪的错误。就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。函数名后跟一对尖括号,尖括号中指定需要特化的类型。原创 2024-07-02 14:46:25 · 322 阅读 · 16 评论 -
List
kw=listkw=listlist是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。原创 2024-06-21 13:21:49 · 818 阅读 · 48 评论 -
vector
vector是表示可变大小数组的序列容器。像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。原创 2024-05-17 14:59:13 · 953 阅读 · 48 评论 -
string(下)
当指定pos时,搜索只包括位置pos或位置pos之后的字符,忽略任何可能出现的包含位置pos之前字符的字符。返回一个指向数组的指针,该数组包含一个以空结尾的字符序列(即C-string),表示字符串对象的当前值。当指定pos时,搜索只包括位置pos处或位置pos之后的字符,忽略位置pos之前可能出现的任何字符。当指定pos时,搜索只包括位置pos处或位置pos之前的字符,忽略位置pos之后可能出现的任何字符。在字符串中搜索与参数中指定的任何字符匹配的最后一个字符。len->要复制的字符的个数。原创 2024-05-11 13:56:52 · 818 阅读 · 50 评论 -
string(上)
cpp中string类文档:https://cplusplus.com/reference/string/string/?kw=stringkw=stringstring是表示字符串的字符串类该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作string在底层实际是:basic_string模板类的别名,typedef basic_string string;不能操作多字节或者变长字符的序列。原创 2024-05-01 23:06:29 · 1062 阅读 · 3 评论 -
C/C++内存管理
new和malloc的不同点在于new处了动态开辟空间,还会调用类的构造函数delete和free的不同点在于delete除了销毁动态开辟的空间,还会调用类的析构函数。原创 2024-04-22 23:18:56 · 1154 阅读 · 14 评论 -
模板初阶
templateclassT1classT2, ...,classTnclass类模板名// 类内成员定义class Testpublic:,_size(0){}private:T* _Data;原创 2024-04-22 23:18:41 · 492 阅读 · 6 评论 -
日期类深度解析
将定义和声明分开书写,增加代码可读性,.cpp文件中采用Date::链接.h中函数的定义。原创 2024-04-19 00:26:27 · 593 阅读 · 8 评论 -
类和对象(下)
对于上述代码,在调用MyQueue的时候,Stack为类内部自定义类型,会调用Stack的默认构造函数,而由于Stack的构造函数需要传参数,不符合默认构造函数的条件,所以代码就会报错,这时如果使用初始化列表对对象成员进行定义,Stack调用自己的构造函数,就可以避免这个错误。Cpp中创建类的时候最好添加构造函数,但调用构造函数并不能将其称为对对象成员变量的初始化,构造函数中的语句只能别称为赋值,初始化只能初始一次,而赋值可以多次赋值,类真正的初始化是在初始化列表里实现的。内部类是一个独立的类,原创 2024-04-18 22:40:33 · 757 阅读 · 32 评论 -
类和对象(中)
类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。构造函数的主要任务并不是开空间创建对象,而是初始化对象。特性:函数名与类名相同无返回值对象实例化时编译器自动调用对应的构造函数构造函数可以重载默认构造函数:介绍:如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成。原创 2024-04-15 21:46:44 · 2329 阅读 · 46 评论 -
类和对象(上)
/成员函数perror("malloc申请空间失败");return;_size = 0;// 扩容++_size;_size = 0;//成员变量public://成员函数private://成员变量。原创 2024-04-07 20:51:33 · 1050 阅读 · 23 评论 -
C++入门(二)
inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建议:将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器内部实现)、不 是递归、且频繁调用的函数采用inline修饰,否则编译器会忽略inline特性。实际项目通常是由多个头文件和多个源文件构成,当前a.cpp中调用了b.cpp中定义的Add函数时,编译后链接前,a.o的目标文件中没有Add的函数地址,因为Add是在b.cpp中定义的,所以Add的地址在b.o中。引用在定义时必须初始化,指针没有要求。原创 2024-03-31 19:42:08 · 2299 阅读 · 42 评论 -
C++入门(一)
由于cpp中包含的stdlib库中有rand变量,这个变量的名称存在于全局作用域当中,可能会与cpp文件中定义的变量发生冲突,所以需要一种方式区分这两个变量,这时就需要命名空间规划命名空间域,对标识符名称进行本地化,以免命名冲突,从而解决这个问题。iostream是cpp内部的库,std是cpp标准库的命名空间名,cpp将标准库的定义和实现都放到了这个命名空间中,这里需要使用std命名空间内部包含的变量和关键字,所以需要将std命名空间展开。原创 2024-03-27 11:46:12 · 931 阅读 · 11 评论