
c++
文章平均质量分 94
DR5200
这个作者很懒,什么都没留下…
展开
-
C++多态
文章目录原创 2022-01-17 20:04:26 · 568 阅读 · 0 评论 -
C++哈希
文章目录一.unordered系列关联式容器一.unordered系列关联式容器unordered_map 使用和介绍(1). unordered_map是存储<key, value>键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。(2). 在unordered_map中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。(3). 在内部,unordered_map没有对<kye, value>按照任何特定的原创 2022-01-16 20:22:29 · 1070 阅读 · 2 评论 -
map和set的介绍和使用
文章目录一.关联式容器二. setset 构造set 修改set 容量和迭代器三.multiset四.mapmap构造map修改一.关联式容器在之前,我们已经接触过STL中的部分容器,比如:vector,list,deque等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。那什么是关联式容器?它与序列式容器有什么区别?关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。比原创 2021-11-23 15:28:02 · 1226 阅读 · 0 评论 -
AVL树/红黑树介绍及插入操作实现
文章目录一.AVL树概念二.AVL树模拟实现三.红黑树概念四.红黑树模拟实现五. map/set模拟实现一.AVL树概念二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。一棵AVL树或者是空树,或者是具有以下性质原创 2021-11-23 14:24:11 · 951 阅读 · 2 评论 -
二叉搜索树介绍和模拟实现
文章目录一.二叉搜索树概念一.二叉搜索树概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:(1). 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值(2). 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值(3). 它的左右子树也分别为二叉搜索树二叉搜索树之所以被称作搜索树是因为该结构适合用来查找,如在上图中我们想要查找10,根节点为11,所以我们直接去11的左半部分找,7 < 10,所以我们去7的右半部分找,9 < 10,所以我们去9原创 2021-11-07 21:54:50 · 474 阅读 · 2 评论 -
C++继承详解
文章目录一.继承的概念和定义二.基类和派生类对象赋值转换三.继承中的作用域四.派生类的默认成员函数五.继承和友元六.继承与静态成员七.菱形继承及菱形虚拟继承八.C++编译器如何通过虚继承解决数据冗余和二义性一.继承的概念和定义继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的原创 2021-10-14 11:53:53 · 2806 阅读 · 14 评论 -
C++模板(函数模板/类模板)
文章目录一.泛型编程二.函数模板一.泛型编程在引入泛型编程之前,我们先来看这样一个问题,怎么做到实现一个通用的交换函数呢?在C语言阶段我们可能会像下面这样写,需要分别实现不同类型的交换函数,又由于C语言不允许出现同名函数,所以函数名也需要不一样,写起来很繁琐void Swapi(int* e1, int* e2){ int tmp = *e1; *e1 = *e2; *e2 = tmp;}void Swapd(double* e1, double* e2){ double tmp =原创 2021-10-05 22:00:31 · 5433 阅读 · 23 评论 -
C++IO流详解
文章目录一.C++输入输出二.C++文件流一.C++输入输出C++标准库提供了一组丰富的输入/输出功能,本文重点讲解C++编程中最常见的 I/O 操作C++的 I/O 发生在流中,流是字节序列,如果字节流是从设备(如键盘,磁盘驱动器,网络连接等)流向内存,这叫做输入操作,如果字节流是从内存流向设备,这叫做输出操作。标准输出流 :预定义的对象 cout 是 ostream 类的一个实例,cout 对象"连接"到标准输出设备,通常是显示屏。标准输入流 :预定义的对象 cin 是 istream 类原创 2021-09-25 15:34:05 · 5834 阅读 · 20 评论 -
stack和queue使用及模拟实现
文章目录一.stack介绍二.stack使用三.stack模拟实现四.queue介绍五.queue使用六.queue模拟实现七. priority_queue的介绍仿函数八.priority_queue的使用九.priority_queue模拟实现(1).仿函数(2).push()(3).pop()(4). top()(5).empty()(6).size()(7). 完整模拟实现(8). priority_queue具体应用一.stack介绍template <class T, class Co原创 2021-09-15 12:36:54 · 420 阅读 · 9 评论 -
list模拟实现
文章目录一. list接口函数总览二.结点类的模拟实现三. 迭代器类模拟实现构造函数前置++和后置++前置- -和后置- -==/!=运算符重载* 运算符重载-> 运算符重载list模拟实现构造函数拷贝构造函数赋值运算符重载析构函数begin和endfront/backinserterasepush_back/pop_back/push_front/pop_frontsizeclearemptyswapresize一. list接口函数总览namespace lyp{ //模拟实现list当中原创 2021-08-16 22:50:43 · 989 阅读 · 11 评论 -
list介绍和基本使用
文章目录一. list介绍二. list使用constructoriteratorcapacityemptysizeElement accessfront/backModifiersassignpush_front/pop_frontpush_back/pop_backinserteraseswapresizeclearoperationsspliceremoveremove_ifuniquesortreverse一. list介绍list文档介绍1). list是可以在常数范围内在任意位置进行插入和原创 2021-08-13 20:07:53 · 1656 阅读 · 8 评论 -
vector模拟实现
文章目录一.vector接口总览二.vector模拟实现默认成员函数构造函数拷贝构造函数赋值运算符重载析构函数iteratorbegin/endcapacitysizecapacityreserveresizeemptymodifierspush_backpop_backinserteraseaccessoperator[]一.vector接口总览namespace lyp{ //模拟实现vector template<class T> class vector { public原创 2021-08-13 10:12:35 · 855 阅读 · 7 评论 -
vector介绍和基本使用
文章目录一.vector介绍二.vector使用(1).constructor一.vector介绍vector文档vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后原创 2021-08-11 14:15:04 · 12143 阅读 · 10 评论 -
编译器对连续的构造函数和拷贝构造函数的优化
一.传值和传引用传值 : 在调用f1(a1)函数时,会首先进行压参数,即用 a1 拷贝构造 aa,会调用拷贝构造函数,f1函数调用结束后,aa对象销毁,执行析构函数,接着main函数调用结束,a1对象销毁,执行析构函数传引用 : 在调用f1(a1)函数时,aa 是 a1 的引用,不会调用拷贝构造函数,main函数调用结束,a1对象销毁,执行析构函数可以看到传引用比起传值少调用了一次拷贝构造和一次析构函数,提高了效率#include<iostream>using namespace s原创 2021-07-26 15:41:51 · 481 阅读 · 11 评论 -
C++ STL string 详解
文章目录一.string类的常用接口声明(1).string类对象的常见构造(2).string类对象的容量操作一.string类的常用接口声明(1).string类对象的常见构造(1). string();功能 : 构造空的string类对象,即空字符串(2).string (const string& str);功能 : 拷贝构造函数(3).string (const string& str, size_t pos, size_t len = npos);功能 : 拷贝s原创 2021-07-26 15:41:01 · 594 阅读 · 1 评论 -
C++内存管理
文章目录一.C/C++内存分布二.C++动态内存管理三.operator new 与 operator delete 函数四.定位new表达式五.malloc/free和new/delete的区别六.内存泄露一.C/C++内存分布(1). 栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。(2). 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信(3). 堆用于程序运行时动态内存分配,堆是可以向上增长的。(4). 数据原创 2021-06-05 11:01:04 · 402 阅读 · 19 评论 -
类和对象(二)
文章目录一.初始化列表二.explicit关键字三.友元函数和友元类四.static成员五.内部类六.C++11的成员初始化一.初始化列表初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。初始化列表是成员列表定义初始化的阶段,而在构造函数体内赋值不能叫初始化,因为初始化只能初始化一次,构造函数体内可以进行多次赋值class Date{public: Date(int year, int month, int day) :原创 2021-06-03 08:18:24 · 330 阅读 · 15 评论 -
C++类和对象(一)
文章目录一.类的引入一.类的引入在C语言阶段,struct关键字用来构造用户自定义数据类型,C++中的struct兼容C的所有用法,同时C++把struct升级成了类,类由两部分组成,一部分是成员变量(属性),另一部分是成员函数(用来对成员变量进行操作),在c语言struct里不能定义函数,C++将struct升级成了类以后,struct里就可以定义函数了typedef int STDataType;struct Stack{ // 定义函数 void StackInit(int initca原创 2021-05-30 13:17:15 · 3265 阅读 · 16 评论 -
C++入门(命名空间,缺省参数,函数重载,引用,内联函数,auto,范围for)
文章目录一.C++关键字二.命名空间一.C++关键字C++总共有63个关键字,在入门阶段我们只是大致了解一下就可,在后续博客中会逐渐讲解二.命名空间相信学过C++的同学,一定都写过下面这个简单的程序#include<iostream>using namespace std;int main(){ cout<<"hello world"<<endl; return 0;}我们先来看第二行代码,using namespace std , 这行代码是原创 2021-05-23 15:41:01 · 699 阅读 · 27 评论 -
sort函数详解
1.sort使用:#include using namespace std;作用:排序时间复杂度:n*lg(n)实现原理:sort并不是简单的快速排序,它对普通的快速排序进行了优化,此外,它还结合了插入排序和推排序。系统会根据你的数据形式和数据量自动选择合适的排序方法,这并不是说它每次排序只选择一种方法,它是在一次完整排序中不同的情况选用不同方法,比如给一个数据量较大的数组排序,开始采用快速排序,分段递归,分段之后每一段的数据量达到一个较小值后它就不继续往下递归,而是选择插入排序,如果递归的太深,原创 2021-01-01 23:24:17 · 355 阅读 · 1 评论