
04 C++
文章平均质量分 77
关于C++的学习笔记
超级布丁
这个作者很懒,什么都没留下…
展开
-
第十六章:红黑树模拟实现STL中的map与set
第十六章:红黑树模拟实现STL中的map与setIterator.h#pragma once// 反向迭代器--迭代器适配器template<class Iterator>struct ReverseIterator{ typedef typename Iterator::reference Ref; typedef typename Iterator::pointer Ptr; typedef ReverseIterator<Iterator> Self; I原创 2022-04-04 13:19:29 · 1104 阅读 · 2 评论 -
第十五章:map和set
第十五章:map和set序列式容器:vector / list / deque / ···【底层为线性序列的数据结构,里面存储的是元素本身 】关联式容器:map / set / unordered_map / underored_set / ···【里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高】1.树形结构的关联式容器根据应用场景的不桶,STL总共实现了两种不同结构的管理式容器:树型结构与哈希结构。**树型结构的关联式容器主要有四种:map原创 2022-04-02 16:56:10 · 784 阅读 · 6 评论 -
二叉树小练习(leetcode)
二叉树小练习1.根据二叉树创建字符串需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。题目链接class Solution {public: string tree2str(TreeNode* root){ string str; _tree2str(root,str); return str; }原创 2022-03-25 21:22:36 · 1595 阅读 · 1 评论 -
第十四章:二叉搜索树
第十四章:二叉搜索树1.二叉搜索树的概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树2.二叉搜索树的实现#include<iostream>using namespace std;template<class K>struct BSTNode{ BSTNode(co原创 2022-03-24 21:45:57 · 2017 阅读 · 6 评论 -
第十三章:多态
第十三章:多态1.多态的概念多态:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。举个例子:比如买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买票;军人买票时是优先买票。2.多态的定义及实现2.1 多态的构成条件多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person,Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件:①必须通过基类的指针或者引用调用虚函原创 2022-03-23 21:27:35 · 1043 阅读 · 3 评论 -
第十二章:继承
第十二章:继承1.继承的概念及定义继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。class Person{public: void Print() { cout << "name:" << _name << endl原创 2022-03-23 20:06:54 · 1203 阅读 · 4 评论 -
第十一章:C++的IO流
第十一章:C++的IO流1.C语言的输入输出C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度输出控制。C语言借助了相应的缓冲区来进行输入与输出。对输入输出缓冲区的理解:①可以屏蔽掉低级I/O的实现,低级I/O的实现依赖操作系统本身内核的实现,所以如果能够屏蔽这部分的差异,可以很容易写出可移植的程序。②可以使原创 2022-03-22 15:42:22 · 1351 阅读 · 3 评论 -
第十章:模板进阶
第十章:模板进阶1.非类型模板参数模板参数分类类型形参与非类型形参。类型形参,就是出现在模板参数列表中,跟在class或者typename之类的参数类型名称。非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。namespace bite{ // 定义一个模板类型的静态数组 template<class T, size_t N = 10> class array { public: T& operator[](si原创 2022-03-21 16:02:34 · 115 阅读 · 0 评论 -
第九章:stack和queue
第九章:stack和queue1.stack1.1 stack的介绍stack的文档介绍stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:原创 2022-03-20 17:30:06 · 156 阅读 · 2 评论 -
第八章:list类
第八章:list类1.list的介绍list的文档介绍list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进原创 2022-03-20 15:05:02 · 193 阅读 · 1 评论 -
第七章:vector类
第七章:vector类1.vector的介绍vector的文档①vector是表示可变大小数组的序列容器。②就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。③本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相原创 2022-03-20 15:04:25 · 1078 阅读 · 2 评论 -
第六章:string类
第六章:string类1.标准库中的string类1.1 string类string类的文档介绍字符串是表示字符序列的类标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信息,请参阅basic_string)。string类是basic_string模板类的一个实例,它使用char来实例化basic原创 2022-03-08 16:07:27 · 158 阅读 · 11 评论 -
第五章:STL概述
第五章:STL概述STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。STL版本:原始版本Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。 HP 版本–所有STL实现版本的始祖。P. J. 版本由P.原创 2022-03-06 11:37:43 · 144 阅读 · 1 评论 -
第四章:模板初阶
第四章:模板初阶1.泛型编程如何实现一个通用的交换函数呢?void Swap(int& left, int& right){ int temp = left; left = right; right = temp;}void Swap(double& left, double& right){ double temp = left; left = right; right = temp;}void Swap(char& left, cha原创 2022-03-06 11:29:06 · 124 阅读 · 1 评论 -
第三章:C&C++内存管理
第三章:C/C++内存管理1.C/C++内存分布int globalVar = 1;static int staticGlobalVar = 1;void Test(){ static int staticVar = 1; int localVar = 1; int num1[10] = {1, 2, 3, 4}; char char2[] = "abcd"; char* pChar3 = "abcd"; int* ptr1 = (int*)malloc(sizeof (int)*4)原创 2022-03-06 10:27:14 · 119 阅读 · 2 评论 -
小练习——日期类的实现
小练习——日期类的实现#include<iostream>using namespace std;class Date{public: Date(int year, int month, int day) : _year(year) , _month(month) , _day(day) { if (!(year > 0 && month > 0 && mont原创 2022-03-02 16:24:00 · 164 阅读 · 0 评论 -
第二章:类和对象
第二章:类和对象C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。1.类的引入C语言中,结构体中只能定义变量;在C++中,结构体内不仅可以定义变量,也可以定义函数。/* example */struct Student{ void SetStudentInfo(const char* name, const char* gender, int age) { strc原创 2022-03-02 16:22:43 · 498 阅读 · 2 评论 -
第一章:C++入门
第一章:C++入门1.C++关键字(C++98)C++总计63个关键字,C语言32个关键字asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenamethrowcaseenummutablestaticunionwchar_tcatch原创 2022-02-27 10:14:40 · 433 阅读 · 6 评论