![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
blank
HELLO WORLD!
KEEP CODING!
展开
-
string类的模拟实现
C++ 的一个常见面试题是让你实现一个 String 类,限于时间,不可能要求具备 std::string 的功能,但至少要求能正确管理资源。简而言之就是实现string类的构造、析构、拷贝构造、赋值运算符重载class bit { class string { public: //构造函数(全缺省构造函数) string(const char* str = "") :_str(new char[strlen(str) + 1]) { strcpy(_str, str); }原创 2020-08-12 21:22:09 · 133 阅读 · 0 评论 -
C++list容器
1、list基本概念**功能:**将数据进行链式存储链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的链表的组成:链表由一系列结点组成结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域STL中的链表是一个双向循环链表由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代...原创 2020-02-17 17:53:57 · 231 阅读 · 0 评论 -
C++queue容器
1、queue 基本概念概念:Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口队列容器允许从一端新增元素,从另一端移除元素队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为队列中进数据称为 — 入队 push队列中出数据称为 — 出队 pop2、queue 常用接口构造函数:queue<T> ...原创 2020-02-16 15:03:57 · 157 阅读 · 0 评论 -
C++stack容器
1、stack 基本概念概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为栈中进入数据称为 — 入栈 push栈中弹出数据称为 — 出栈 pop2、stack 常用接口功能描述:栈容器常用的对外接口构造函数:stack<T> stk; ...原创 2020-02-16 14:46:19 · 315 阅读 · 0 评论 -
C++deque容器
1、deque容器基本概念功能:双端数组,可以对头端进行插入删除操作deque与vector区别:vector对于头部的插入删除效率低,数据量越大,效率越低deque相对而言,对头部的插入删除速度回比vector快vector访问元素时的速度会比deque快,这和两者内部实现有关deque内部工作原理:deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据...原创 2020-02-15 19:25:58 · 183 阅读 · 0 评论 -
C++vector容器的插入和遍历
STL中最常用的容器为Vector,可以理解为数组,那么如何向这个容器中插入数据、并遍历这个容器呢?原创 2020-02-13 22:06:47 · 938 阅读 · 0 评论 -
C++类模板的分文件编写
问题:类模板中成员函数创建时机是在调用阶段,导致分文件编写时链接不到解决:解决方式1:直接包含.cpp源文件解决方式2:将声明和实现写到同一个文件中,并更改后缀名为.hpp,hpp是约定的名称,并不是强制person.hpp中代码:#pragma once#include <iostream>using namespace std;#include <s...原创 2020-02-13 19:39:25 · 1853 阅读 · 0 评论 -
C++函数模板案例——数组排序
案例描述:利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序排序规则从大到小,排序算法为选择排序分别利用char数组和int数组进行测试//交换的函数模板template<typename T>void mySwap(T &a, T&b){ T temp = a; a = b; b = temp;}template<cl...原创 2020-02-13 16:03:11 · 3030 阅读 · 1 评论 -
C++多态案例——电脑组装
案例描述:电脑主要组成部件为 CPU(用于计算),显卡(用于显示),内存条(用于存储)将每个零件封装出抽象基类,并且提供不同的厂商生产不同的零件,例如Intel厂商和Lenovo厂商创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口测试时组装三台不同的电脑进行工作#include<iostream>using namespace std;//抽象CPU类c...原创 2020-02-12 21:55:51 · 992 阅读 · 2 评论 -
C++多态案例——计算机类
案例描述:分别利用普通写法和多态技术,设计实现两个操作数进行运算的计算器类多态的优点:代码组织结构清晰可读性强利于前期和后期的扩展以及维护//普通实现class Calculator {public: int getResult(string oper) { if (oper == "+") { return m_Num1 + m_Num2; } else...原创 2020-02-12 21:33:09 · 390 阅读 · 1 评论 -
C++多态
1、多态的基本概念多态是C++面向对象三大特性之一多态分为两类静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名动态多态: 派生类和虚函数实现运行时多态静态多态和动态多态区别:静态多态的函数地址早绑定 - 编译阶段确定函数地址动态多态的函数地址晚绑定 - 运行阶段确定函数地址class Animal{public: //Speak函数就是虚函数 /...原创 2020-02-12 21:29:35 · 99 阅读 · 0 评论 -
C++菱形继承
菱形继承概念: 两个派生类继承同一个基类 又有某个类同时继承者两个派生类 这种继承被称为菱形继承,或者钻石继承典型的菱形继承案例:菱形继承问题:羊继承了动物的数据,驼同样继承了动物的数据,当草泥马使用数据时,就会产生二义性。草泥马继承自动物的数据继承了两份,其实我们应该清楚,这份数据我们只需要一份就可以。class Animal{public: ...原创 2020-02-12 19:57:45 · 514 阅读 · 0 评论 -
C++运算符重载
概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型1、加号运算符重载作用:实现两个自定义数据类型相加的运算加号运算符重载有两种:1、成员函数重载2、全局函数重载代码实现:class Person {public: // 1、成员函数重载+号 // 成员函数本质调用 Person p3 = p1.operator + (p2) /*Person ope...原创 2020-02-11 22:39:33 · 83 阅读 · 0 评论 -
C++的浅拷贝和深拷贝
深浅拷贝是面试经典问题,也是常见的一个坑。浅拷贝:简单的赋值拷贝操作深拷贝:在堆区重新申请空间,进行拷贝工作1、class Person {public: Person() { cout << "Person的默认构造函数调用" << endl; } Person(int age,int height) { m_Age = age; m_H...原创 2020-02-10 20:05:04 · 122 阅读 · 0 评论 -
C++指针
1、指针的基本概念指针的作用:可以通过指针间接访问内存内存编号是从0开始记录的,一般用十六进制数字表示可以利用指针变量保存地址2、指针变量的定义和使用指针变量定义语法:数据类型 * 变量名;int main() { // 1、指针的定义 int a = 10; // 指针定义语法: 数据类型 * 变量名; int * p; // 指针变量赋值 p = &a;...原创 2020-02-09 15:21:05 · 64 阅读 · 1 评论 -
C++运算符
作用:用于执行代码的运算以下位主要几类运算符:运算符类型作用算术运算符用于处理四则运算赋值运算符用于将表达式的值赋给变量比较运算符用于表达式的比较,并返回一个真值或假值逻辑运算符用于根据表达式的值返回真值或假值1、算术运算符作用:用于处理四则运算算术运算符包括以下符号:运算符+-*/%++++––术语...原创 2020-02-08 23:14:28 · 96 阅读 · 0 评论 -
C++数据类型
C++规定在创建一个变量或者常量是,必须要制定出相应的数据类型,否则无法给变量分配内存。原创 2020-02-08 22:36:25 · 91 阅读 · 0 评论 -
string类
一、标准库中string类1、c语言中的字符串c语言中,字符串是以‘\0’结尾的一些字符的集合,为了操作方便,c标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。2、string类<1>、string是表示字符串的字符串类<2>、该类的接口与常规容器的接口基本相同,...原创 2020-02-08 18:29:35 · 105 阅读 · 0 评论 -
智能指针
智能指针是行为类似于指针的类对象,但这种对象还有其他功能。我们主要了解可帮助管理动态内存分配的智能指针模板。原创 2020-02-08 17:35:26 · 70 阅读 · 0 评论 -
异常
程序有时会遇到运行阶段错误,导致程序无法正常的运行下去。例如,程序可能试图打开一个不可用的文件,请求过多的内存,或者遭遇到不能容忍的值。通常,程序员都会试图预防这种意外情况。C++异常为处理这种情况提供了一种强大而灵活的工具。异常是相对较新的C++功能,有些老式编译器可能没有实现。另外,有些编译器默认关闭这种特性,您可能需要使用编译器选项来启动它。1、C语言传统的处理错误的方式传统的错误处理...原创 2020-02-07 21:08:51 · 144 阅读 · 0 评论 -
红黑树
红黑树的概念:红黑树,是一种二叉搜索树,但在每个节点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上每个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。红黑树的性质每个结点不是红色就是黑色根结点是黑色的如果一个结点时红色的,则它的两个孩子结点是黑色的对于每个结点,从该结点到其所有后代叶结点的简单路径上,...原创 2019-12-17 17:33:14 · 71 阅读 · 0 评论 -
AVL树
1、概念二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:它的左右子树都是AVL树左右子树高度之差(简...原创 2019-12-12 17:49:13 · 77 阅读 · 0 评论 -
C++_二叉搜索树
1、二叉搜索数的概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树2、二叉搜索树操作1、二叉搜索树的查找2、二叉搜索树的插入a、树为空,则直接插入如果是空树,直接插入,然后返回trueb、树不空,按二叉...原创 2019-12-10 11:13:01 · 729 阅读 · 0 评论 -
STL关联式容器——map/multimap
1、关联式容器关联式容器也是用来存储数据的,与序列式容器不同的时,其里面存储的是<key,value>结构的键值对,在数据检索时比序列式容器效率更高。2、键值对用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key对应的信息。SGI-STL中关于键值对的定义template<class T1,clas...原创 2019-11-23 00:10:06 · 227 阅读 · 1 评论 -
继承
一、继承的概念及定义1、继承的概念继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程,继承是类设计层次的复用。class TestBase {public: int m_a; TestBase(int i) : m_a(i) {...原创 2019-10-31 13:46:25 · 2565 阅读 · 0 评论 -
STL简介
一、什么是STLSTL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。二、STL的版本原始版本Alexander Stepanov、Meng Lee在惠普实验室完成的原始版本,本着开源精神,它们声明允许任何人任意运用、拷贝、修改、传播、商用使用这些代码,无需付费。唯一的条件...原创 2019-10-19 15:30:40 · 146 阅读 · 0 评论 -
模板
一、泛型编程STL是一种泛型编程。面向对象编程关注的是编程的数据方面,而泛型编程关注的是算法。它们之间的共同点是抽象和创建可重用代码,但它们的理念绝然不同。泛型编程旨在编写独立于数据类型的代码。在C++中,完成通用程序的工具是模板。当然,模板使得能够按泛型定义函数或类,而STL通过通用算法更进了一步。模板让这一切成为可能,但必须对元素进行仔细地设计。二、函数模板1、函数模板概念函数模板代...原创 2019-10-19 14:53:17 · 131 阅读 · 0 评论 -
动态内存管理
一、内存区域1:栈、堆、全局区、常量区、代码区栈:系统自动分配的空间,只要不特殊声明,就定义在栈区,函数的区域也在栈上。栈是向下增长的堆:使用动态内存分配的方式可以申请丢空间,用完要手动释放全局区:静态变量、全局变量(static)常量区:代码中的数字、字符等常量,例如‘a’,-1.2等代码区:存放可执行代码,避免频繁的读硬盘。C语言内存管理方式在C++中可以继续使用,但有些地方就无...原创 2019-10-14 13:57:57 · 76 阅读 · 0 评论 -
两个栈实现一个队列
栈的特性:先进后出队列的特性:先进先出这个原理就跟用两个杯子倒出沉淀物一样,先把 1 杯子上面的水倒入 2 杯子中,然后把 1 杯子的沉淀物取出,再把 2 杯子中的倒入到 1 中…依次循环下面我们用代码实现:#include <iostream>#include <stack>using namespace std;class stackQueue { s...原创 2019-10-14 12:31:37 · 52 阅读 · 0 评论 -
C++基础入门_2
6.引用6.1 引用概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。类型& 引用变量名(对象名)=引用实体;void TestRef() { int a = 10; int& ra = a; //<===定义引用类型 int& ea = a; cout << ...原创 2019-09-28 15:51:57 · 82 阅读 · 0 评论 -
类的构造函数和析构函数
一、构造函数1.1 概念class Date {public: void SetDate(int year, int month, int day) { _year = year; _month = month; _day = day; } void Display() { cout << _year << "-" << _month...原创 2019-09-28 13:22:30 · 1964 阅读 · 0 评论 -
C++基础入门_1
1.命名空间在C/C++中,变量,函数和后面的类都是大量存在的,这些变量,函数和类的名称将都存在于全局作用域中,可能回导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。1.1 命名空间定义定义命名空间,需要使用到namespace关键字,**后面根命名空间的名字,然后接一对{}**即可,{}中即为命名空间的...原创 2019-04-26 13:37:21 · 110 阅读 · 0 评论