C++
文章平均质量分 64
C++
Micmic33
这个作者很懒,什么都没留下…
展开
-
【STL***关联式容器】
RB-Tree的源码太难了,先不学...红黑树有五个特性:以下四种都是适配器!set,map的底层实现均为红黑树multiset和multimap也是基于红黑树,区别就在于可以插入相同的键值什么时候需要用multiset?当然是需要用set,但是又允许重复key存在的时候了。什么时候用set?需要随时往容器中插入元素,随时对元素进行快速查找,又需要按某种顺序对元素进行遍历的时候.原创 2022-09-27 11:01:18 · 342 阅读 · 0 评论 -
【STL***queue配接器】
与stack同理,queue的数据都是在头部进行操作的。(PS.配接器适配器)原创 2022-09-26 10:33:45 · 111 阅读 · 0 评论 -
【STL***stack配接器】
会发现stack的功能deque都已经实现了,因此只需要对deque的功能进行部分封装。比如,提取出pop_back,push_back等。严格来说stack不是容器,是一个底部容器完成它所有的工作,而它只修改了容器的接口,它叫做配接器。上一篇,分析了deque.deque是一个双端开口,存放在连续空间中。而stack是栈,仅允许在尾部操作。原创 2022-09-26 10:30:49 · 118 阅读 · 0 评论 -
【STL***deque容器三】
本节分析deque的insert操作。原创 2022-09-24 09:07:26 · 131 阅读 · 0 评论 -
【STL***deque容器二】
本节分析push 和 pop操作。原创 2022-09-24 09:01:39 · 325 阅读 · 0 评论 -
【STL***deque容器一】
deque的构造析构等基本属性获取的方法分析了, 注意的 range_initialize函数是我们看不到的实现. 而它确实非常重要的, 有了它, deque就能够对非random_access_iterator_tag类型的迭代器起作用, 考虑到"向下兼容". 下一节再来分析deque的删除操作。原创 2022-09-23 17:16:47 · 121 阅读 · 0 评论 -
【STL***list容器三】
list是一个循环双向链表, 不是一个连续地址空间, 所以sort功能需要特殊的算法单独实现, 而不能用算法中的sort. 当然还可以将list的元素插入到vector中最后将vector排序好的数据拷贝回来, 不过这种做法很费时, 费效率先分析几个会被调用的函数。原创 2022-09-21 11:06:02 · 348 阅读 · 0 评论 -
【STL***list容器二】
本节分析list的插入删除重载等源码。原创 2022-09-20 11:35:08 · 298 阅读 · 0 评论 -
【STL***list容器一】
vector容器在涉及高频率插入删除时效率太低了list是用链表进行实现的,链表删除插入时间复杂度为O(1),效率相当高,不过随机访问就会变成O(n).list在插入和删除操作后,迭代器不会失效。原创 2022-09-18 10:43:44 · 180 阅读 · 0 评论 -
【STL***vector容器三】
vector适合用来做随机访问很快, 也支持适合频率较低的插入和删除操作, 在每次插入和删除后迭代器都会失效, 因为不能保证操作之后迭代器的位置没有改变。原创 2022-09-17 21:00:09 · 218 阅读 · 0 评论 -
【STL***vector容器二】
本节将vector的删除, 交换, 重载等操作进行的分析. 学到关于交换数组可以修改头尾指针即可, 并不实际交换整个元素. 同时要注意erase清除是一个左闭右开的区间. 因为insert的代码很多,也有一点复杂, 所以我将插入操作放到下节进行分析。原创 2022-09-17 20:41:37 · 196 阅读 · 0 评论 -
【STL***vector容器一】
vector的迭代器是一个普通的指针构造函数的重载满足不同的用户需求vector因为是类, 所以在生命周期结束后会自动调用析构函数, 用户不再手动的释放内存, 也不会出现内存泄露的问题, 用户也可以主动调用析构函数释放内存finish是指向最后一个元素的后一位地址, 不是直接指向最后一个元素。原创 2022-09-15 15:36:25 · 575 阅读 · 0 评论 -
【C++MiNiSTL项目开发笔记】
GitHub 是一个用于版本控制和协作的代码托管平台,ta能够让你和任何地方的其他工作者一起做项目。Git是目前世界上最先进的分布式版本控制系统git clone用于从github上下载源码git init如果是自己新创建一个文件夹,就在里边git然后告诉git管理这个文件夹下的代码就是输入在工作区写完文件夹时,提交(如果不是提交这个文件夹下所有的,就把点改成要提交的文件名就行)此时,那个文件就会进入准备提交的状态(把文件加入暂存区)这样,git会以数据库的形式把代码保存在git仓库中。原创 2022-09-10 09:18:11 · 938 阅读 · 0 评论 -
【侯捷C++-----STL与泛型编程】
标准库以头文件的形式呈现。原创 2022-09-03 10:10:03 · 443 阅读 · 0 评论 -
【侯捷C++-----内存管理Chapter1(至G2.9std:alloc源码)】
malloc是memory allocation的意思~~原创 2022-08-13 16:52:12 · 538 阅读 · 0 评论 -
【C++Primer---C++知识点记录*VI---泛型算法】
标准库并未给每个容器都定义成员函数来实现这些操作,而是定义了一组泛型算法这些算法并不直接操作容器,而是遍历由两个迭代器指定的一个元素范围我们发现,它们都可以使用find算法算法永远不会执行容器的操作。算法运行于迭代器之上,永远不会直接添加或删除元素只读取输入范围内的元素,不改变元素。例如find,count,accumulate(在头文件numeric)如accumulate的第三个参数,就是开始累加的初值,这个值便决定了函数中使用哪个+运算符以及返回值的类型。我们只能写string(""),而不能写"",原创 2022-06-28 09:58:54 · 273 阅读 · 0 评论 -
【C++Primer---C++知识点记录*V---IO库】
目录IO类IO对象无拷贝或赋值条件状态管理输出缓冲文件输入输出string流iostream定义了用于读写流的基本类型fstream定义了读写命名文件的类型sstream定义了读写内存string对象的类型标准库使我们能忽略不同类型的流之间的差异,这是通过继承机制实现的(例如ifstream继承自istream)因为不能拷贝,所以不能将形参和返回值类型设置为流类型,所以进行IO操作的函数要以引用的方式传递和返回流。有一些函数和标志,可以帮助我们访问和操纵流的条件状态p280每个输出流都管理一个缓冲区,用来保原创 2022-06-27 16:56:14 · 123 阅读 · 0 评论 -
【C++Primer---C++知识点记录IV---类】
类的基本思想是数据抽象和封装数据抽象是一种依赖于接口和实现分离的编程技术定义在类内部的函数是隐式的inline函数成员函数通过一个名为this的额外隐式参数来访问调用它的那个对象,当我们调用一个函数时,会用请求该函数的对象地址初始化thisreturn a相当于 return this->a在函数的参数列表后加const,const会修改隐式this指针的类型常量对象,常量对象的引用或指针都只能调用常量成员函数编译器在处理类时,先编译成员的声明,然后才轮到函数体若在类的外部定义成员函数,除了要和声明一模一样原创 2022-06-24 10:31:52 · 67 阅读 · 0 评论 -
【C++Primer---C++知识点记录III---表达式、语句、函数】
左值和右值lvalue代表一个在内存中占有确定位置的对象(换句话说就是有一个地址)。rvalue通过排他性来定义,每个表达式不是lvalue就是rvalue。因此从上面的lvalue的定义,rvalue是在不在内存中占有确定位置的表达式。在C++中一个简单的归纳:当一个对象被用作右值时,用的是对象的值(内容),当一个对象被用作左值时,用的是对象的身份(在内存中的位置)一个重要的原则是在需要右值的地方可以用左值来代替,但是不能把右值当做左值使用右值引用(C++11)有四种运算符明确规定了运算对象的求值顺序&原创 2022-06-21 17:40:24 · 254 阅读 · 0 评论 -
【C++Primer---C++知识点记录II-标准库类型初识】
头文件不该包含using声明(这个属于规范内容)目录标准库类型string标准库类型vector迭代器介绍数组初始化string:使用=,是拷贝初始化,编译器把等号右侧的初始值拷贝到新创建的对象中去。如果不使用=,执行的是直接初始化若初始化要用到的值有多个,只能使用直接初始化----> string s(10,'c');这实际上是创建了一个string对象然后又拷贝给了s,10和c是参数string对象上的操作(待扩展)string 对象会自动忽略开头的空白并从第一个真正的字符开始读取,直到遇到下一个空白如原创 2022-06-21 09:26:44 · 219 阅读 · 0 评论 -
【C++Primer---C++知识点记录I---开始变量和基本类型】
【IDE】(集成开发环境),把编译器与其他程序创建和分析工具包装在一起e)类定义了行为有时测试程序会反复输入,这时候就可以使用文件重定向(待学)点运算符只能用于类类型的对象C++类型决定了能对......原创 2022-06-04 15:22:22 · 133 阅读 · 0 评论 -
C++笔记-vector容器
(9条消息) C++_vector操作_刘同学的博客-CSDN博客_vector操作原创 2021-10-18 15:13:09 · 974 阅读 · 0 评论 -
C++笔记-模板
为什么要有模板?模板的目的时为了提高复用性,将类型参数化函数模板 建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表 语法: template<typename T> (或class T) 函数声明或定义 有两种使用方法自动类型推导 显示指定类型 普通函数和函数模板的区别: 普通函数可以发生自动类型转换(如把char类型转换成int类型) 函数模板用自动类型推导,不可以发生隐式类型转换...原创 2021-10-17 21:03:49 · 299 阅读 · 0 评论 -
类模板案例-数组类封装
#pragma once#include<iostream>using namespace std;template<class T>class MyArray {public: MyArray(int Capacity) { this->Capacity = Capacity; this->Size = 0; this->pAddress = new T[this->Capacity]; } //尾插法 void Pus.原创 2021-10-17 12:52:47 · 93 阅读 · 0 评论 -
C++ Test-职工管理系统
职工抽象类Worker成员属性ID Name DeptID成员方法(都是纯虚函数)virtual void showInfo() = 0;显示职工的所有属性、岗位职责virtual string getDeptName() = 0;根据职工岗位返回一个字符串派生类Employee、Manager、Boss以public方式继承Worker 有自己的构造函数 重写Worker中的纯虚函数职工管理类WorkerManager定义了对职工的所有操作...原创 2021-10-14 11:30:57 · 131 阅读 · 0 评论 -
C++笔记-多态
多态分为静态多态和动态多态静态多态:函数重载和运算符重载,复用函数名 动态多态:派生类和虚函数实现运行时动态多态区别:静态多态的函数地址早绑定,在编译阶段确定函数地址 动态多态的函数地址晚绑定,在运行阶段确定函数地址语法在speak()函数前加virtual变成虚函数此时运行结果就能变成Cat Speak动态多态满足条件存在继承关系 子类重写父类的虚函数(不同于函数重载,函数重载是函数名相同参数不同,而重写的函数返回值类型和函数名和参数完全一致)...原创 2021-10-12 14:14:28 · 164 阅读 · 0 评论 -
多态案例-电脑组装
//电脑中有零件:CPU 显卡 内存条//将每个零件封装出抽象基类,并提供不同厂商生产的子类//创建电脑类提供让电脑工作的函数,并调用每个零件工作的接口//抽象出不同零件类,它们都不需要实例化对象,因此都是抽象类class CPU {public: virtual void calculate() = 0;};class VideoCard {public: virtual void display() = 0;};class Memory {public: virtua.原创 2021-10-12 11:35:22 · 136 阅读 · 0 评论 -
多态案例-饮品制作
创建饮品共同操作的抽象类class AbstructDrinking {public: //煮水 virtual void Boil() = 0; //冲泡 virtual void Making() = 0; //总和 void myDrink(){ Boil(); Making(); }};子类Coffee类class Coffee :public AbstructDrinking { void Boil() { cout << "咖..原创 2021-10-12 10:23:43 · 114 阅读 · 0 评论 -
C++笔记-继承
目录继承方式继承中构造和析构顺序继承同名成员处理方式同名静态成员处理方式多继承菱形继承继承的好处:减少重复代码语法: class 子类:继承方式 父类继承方式公共继承 保护继承 私有继承父类中所有非静态成员属性都被子类继承了,私有成员访问不到是因为被编译器隐藏了派生类对基类成员的访问形式主要有以下两种:内部访问:由派生类中新增的成员函数对基类继承来的成员的访问。 对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问。继承中构...原创 2021-10-10 17:10:21 · 52 阅读 · 0 评论 -
C++笔记-运算符重载
概念:对已有的运算符进行重新定义,赋予其另一种功能,以适应不同的数据运算运算符重载也可以函数重载而对于内置数据类型,编译器知道如何进行运算加号运算符重载operator+左移运算符重载operator<<作用:可以输出自定义数据类型...原创 2021-10-10 14:05:22 · 101 阅读 · 0 评论 -
C++笔记-类和对象
C++面向对象的三大特性:继承 多态 封装具有相同性质的对象,可以抽象为类封装的意义将属性和行为作为一个整体,表现生活中的事物 将属性和行为加以权限控制公共权限 成员 类内可以访问 类外可以访问 保护权限 成员 类内可以访问 类外不可以访问(子类可访问父类中保护内容) 私有权限 成员 类内可以访问 类外不可以访问(子类不可访问父类私有内容)实例化:通过一个类创建一个对象的过程成员属性设置为私有的优点可以自己...原创 2021-10-06 23:49:26 · 69 阅读 · 0 评论 -
C++各知识总结汇总
????C++中,类会自动生成哪些函数声明时编译器不会生成任何成员函数对于空类,声明时,编译器不会生成任何的成员函数,只会生成1个字节的占位符。空类同样可以被实例化,而每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址若定义class Empty_one{};则sizeof(Empty_one)=1空类定义时会生成6个成员函数默认构造函数 拷贝构造函数 析构函数 赋值运算符原创 2021-09-01 08:55:41 · 74 阅读 · 0 评论 -
类和对象II
this指针this指针保存当前对象的地址,称为自引用指针*this就是当前对象对象数组和对象指针用对象指针访问对象数组(把对象数组的地址赋给对象指针,指针用 -> 而不是 . 调用成员函数)Score score[2];score[0].setScore(90, 99);score[1].setScore(67, 89);Score *p;p = score; //将对象score的地址赋值给pp->showScore();p++; //对象指针变原创 2021-08-31 15:40:16 · 73 阅读 · 0 评论 -
类和对象 I
类的构成类声明包括数据成员和成员函数。按访问权限划分,数据成员和成员函数又可分为共有、保护和私有3种。一般情况下,一个类的数据成员应该声明为私有成员(保护数据),成员函数声明为共有成员*不能在类声明中给数据成员赋初值成员函数的定义在类的声明中只给出成员函数的原型,而成员函数的定义写在类的外部返回值类型 类名::成员函数名(参数表){ 函数体}内联成员函数的定义1.隐式声明:将成员函数直接定义在类的内部2.显式声明:在类声明中只给出成员函数的原型,而将成员函数的定义放在原创 2021-08-31 14:42:57 · 70 阅读 · 0 评论 -
C++ 知识点
cin在默认情况下,运算符“>>”将跳过空白符,然后读入后面与变量类型相对应的值。因此,给一组变量输入值时可用空格符、回车符 将输入的数据间隔开。当输入字符串(即类型为string的变量)时,提取运算符“>>”的作用是跳过空白字符,读入后面的非空白字符,直到遇到另一个空白字符为止,并在串尾放一个字符串结束标志‘\0’。C++输入含空格的字符串getline()(包含头文件#include <string>)int main()...原创 2021-08-30 11:36:17 · 398 阅读 · 0 评论 -
面向对象程序设计
目录一.概述二.对象、类、消息、方法三.基本特征一.概述面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一,程序一般由类的定义和类的使用两部分组成;第二,程序中的一切操作都是通过向对象发送消息来实现的,对象接收到消息后,启动有关方法完成相应的操作。二.对象、类、消息、方法对象:数据+操作通过对象来调用类中的方法类:具有相同数据和相同操作的对象的集合类由数据成员和方法(成员函数)组成 消息传递:对象间的操作方法:对象实现的行为三.基原创 2021-08-30 09:36:51 · 684 阅读 · 0 评论