![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++语法知识
文章平均质量分 93
没什么..
一个可爱的人
展开
-
C++---类型转换
C++类型转换1. C语言中的类型转换2. C++强制类型转换2.1 static_cast2.2 reinterpret_cast2.3 const_cast2.4 dynamic_cast3. explicit和RTTI(运行时类型识别)1. C语言中的类型转换在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换。隐式类型转化:编译器在编译阶段自动进行,能原创 2021-08-05 15:23:45 · 161 阅读 · 0 评论 -
C++---特殊类设计
特殊类设计1. 设计模式2. 单例模式2.1 饿汉模式2.2 懒汉模式3. 设计一个类- - -只能在堆上创建对象4. 只能在栈上创建对象5. 不能被拷贝6. 不能被继承1. 设计模式设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。为什么会产生设计模式这样的东西呢?就像人类历史发展会产生兵法。最开始部落之间打仗时都是人拼人的对砍。后来春秋战国时期,七国之间经常打仗,就发现打仗也是有套路的,后来孙子就总结出了《孙子兵法》。孙子兵法也是类似。使用设计原创 2021-07-31 17:34:48 · 277 阅读 · 0 评论 -
C++11---智能指针
智能指针1. 为什么引入智能指针?1.1 内存泄漏2.智能指针的使用及原理2.1 RAII2.2 智能指针的原理3. C++98- - -auto_ptr4. unique_ptr5. shared_ptr5.1 循环引用6. weak_ptr1. 为什么引入智能指针?void Func(){ vector<int*> v; int* p = new int; v.push_back(p); //因为push_back的时候有可能需要申请空间,但是万一申请内存失败了怎么办 v.a原创 2021-07-31 15:07:11 · 1504 阅读 · 9 评论 -
C++11---右值引用和Lambda表达式
右值引用1. 右值引用2. 为什么要引入右值引用?1. 右值引用C++98中提出了引用的概念,引用即别名,引用变量与其引用实体公共同一块内存空间,而引用的底层是通过指针来实现的,因此使用引用,可以提高程序的可读性。为了提高程序运行效率,C++11中引入了右值引用,右值引用也是别名,但其只能对右值引用。左值(原来所接触的引用):可以放到 “=” 左边的值一般就是可修改的值右值:一般是不可以修改的一些值。比如:常量、临时变量、返回值#include<iostream>using na原创 2021-07-22 12:13:24 · 518 阅读 · 1 评论 -
哈希的应用
这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录原创 2021-07-15 16:29:05 · 306 阅读 · 0 评论 -
数据结构---哈希(Hash)
哈希1. 哈希概念2. 哈希函数3. 哈希冲突3.1 闭散列3.1.1 闭散列模拟实现3.2 开散列3.2.1 开散列模拟实现4. 基于开散列实现unordered_set5. 基于开散列实现unordered_map6. 闭散列和开散列对比7. 哈希的应用7.1 位图对于set和map来说底层所使用的是红黑树,其在搜索上面已经很厉害了,为什么还需要在搞一个unordered_set和unordered_map呢?#include<iostream>#include<vector&g原创 2021-06-19 18:55:04 · 4276 阅读 · 1 评论 -
底层实现set和map
底层实现set和map1. 改进红黑树2. 对于set模拟封装3. 对于map模拟封装1. 改进红黑树通过STL可以得到,对于set和map的实现底层所使用的的都是红黑树,所以这里比较难得是对模板的使用。#pragma onceenum Color{ RED, BLACK};template<class T>struct RBTreeNode{ RBTreeNode<T>* _left; RBTreeNode<T>* _right; RBT原创 2021-06-16 19:47:00 · 323 阅读 · 0 评论 -
C++---map和set
map和set1. 关联式容器2. 键值对3. 树形结构的关联式容器3.1 map3.1.1 map的迭代器3.1.2 map的容量与元素访问3.1.3 map中元素的修改3.2 multimap3.3 set3.3.1 set的模板参数列表3.3.2 set的容量3.3.3 set修改操作3.4 multiset1. 关联式容器在初阶阶段,我们已经接触过STL中的部分容器,比如:vector、list、deque、forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列原创 2021-05-27 22:32:38 · 456 阅读 · 9 评论 -
C++---多态原理探究
多态原理探究1. 重载、重写、隐藏(重定义)的对比2. 抽象类三级目录1. 重载、重写、隐藏(重定义)的对比2. 抽象类在虚函数的后面写上 =0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。纯虚函数规范了派生类必须重写,另外纯虚函数更体现出了接口继承。隐藏技能:强制子类去重写基类来实例化三级目录...原创 2021-05-12 21:16:44 · 224 阅读 · 3 评论 -
C++---多态
多态1. 多态的概念2. 多态的定义及实现2.1多态的构成条件2.2 虚函数2.3 虚函数的重写1. 多态的概念多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。(都是去买火车票,但是普通人买和学生以及军人买票他们之间产生的结果都是不一样的)2. 多态的定义及实现2.1多态的构成条件多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。那么原创 2021-04-28 14:48:05 · 166 阅读 · 0 评论 -
C++---继承
继承1. 继承的概念及定义1.1 继承的概念1.2 继承的定义1.2.1 定义格式1.2.2 继承关系和访问限定符1.2.3 继承基类成员访问方式的变化2. 基类和派生类对象赋值转换3. 继承中的作用域4. 派生类的默认成员函数5. 继承与友元6. 继承与静态成员1. 继承的概念及定义1.1 继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类(父类)特性的基础上进行扩展,增加功能,这样产生新的类,称派生类(子类)。继承呈现了面向对象程序原创 2021-04-27 10:47:31 · 759 阅读 · 4 评论 -
C++---priority_queue和仿函数
priority_queue和仿函数1. priority_queue(优先级队列)1.1 priority_queue的介绍1.2 priority_queue的使用1.3 priority_queue的模拟实现2. 仿函数1. priority_queue(优先级队列)但是可以很明确的说,虽然他叫优先级队列,但是它并不满足队列的特性,先进先出(FIFO)1.1 priority_queue的介绍优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。此上原创 2021-04-17 17:07:56 · 410 阅读 · 1 评论 -
C++---stack和queue
stack&&queue&&priority_queue1. stack1.1 stack的介绍1.2 stack的使用1.3 stack的模拟实现2. queue2.1 queue的介绍2.2 queue的使用2.3 queue的模拟实现3. 容器适配器1. stack1.1 stack的介绍stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类原创 2021-04-16 15:23:09 · 297 阅读 · 0 评论 -
C++---list模拟实现
list模拟实现1. 底层实现2. list模拟实现的完整代码3. list模拟实现注意点3.1 list介绍1. 底层实现2. list模拟实现的完整代码3. list模拟实现注意点3.1 list介绍list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是带头双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list(单链表)非常相似:最主要的不同在于f原创 2021-04-13 18:58:49 · 168 阅读 · 0 评论 -
C++---vector模拟实现
通过模拟实现不是为了造出来更好的,而是去更深层次的学习。vector模拟实现1. 底层实现一级目录一级目录1. 底层实现在STL源码中,vector类维护有三个迭代器(三个类型指针)start, finish, end_of_storage, 分别代表头, 尾(实际使用的), vector 存储尾部(占用的,通常大于实际使用)。一级目录一级目录...原创 2021-04-09 19:14:42 · 204 阅读 · 0 评论 -
C++---String的模拟实现
不是为了去造更好的轮子,只是为了能够更好的理解和使用,所以对于string内部的成员函数的如何实现是非常值得学习的。原创 2021-03-29 08:31:50 · 1060 阅读 · 2 评论 -
C++容器---string类
string类1. 什么是STL1.1 STL的六大组件1.2 学好STL的三种境界2. string类2.1 string类的常用接口说明2.1.1.string类对象的常见拷贝构造2.1.2 string类对象的容量操作2.1.3 string类对象的访问及遍历操作2.1.4 string类对象的修改操作1. 什么是STLSTL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。1.原创 2021-03-19 22:04:44 · 246 阅读 · 1 评论 -
C++动态内存管理
C++动态内存管理1. C/C++内存分布2. C语言中动态内存管理方式3. C++中动态内存管理4. operator new与operator delete函数5. new和delete的实现原理6. 定位new表达式(placement-new)1. C/C++内存分布2. C语言中动态内存管理方式3. C++中动态内存管理4. operator new与operator delete函数5. new和delete的实现原理6. 定位new表达式(pla原创 2021-03-13 21:21:44 · 148 阅读 · 0 评论 -
C++模板
模板初认识1. 泛型编程2. 函数模板2.1 函数模板格式2.2 函数模板的原理2.3 函数模板的实例化2.4 模板参数的匹配原则3. 类模板3.1 类模板的实例化1. 泛型编程void Swap(int& left, int& right){ int temp = left; left = right; right = temp;}void Swap(double& left, double& right) { double temp原创 2021-03-13 11:31:00 · 158 阅读 · 0 评论 -
C++类与对象再升华
C++类与对象升华补充1. 再谈构造函数1.1 初始化列表2. C++11的成员初始化新玩法3. 友元4. static成员5. 内部类6. 再次理解封装1. 再谈构造函数1.1 初始化列表初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。2. C++11的成员初始化新玩法3. 友元4. static成员5. 内部类6. 再次理解封装C++类与对象初识链接: link.C++类与对象升华链接: link....原创 2021-03-10 16:34:44 · 1577 阅读 · 6 评论 -
C++的类与对象升华
日期类具体化分析C++的类与对象(二)1. 类的6个默认成员函数2. 构造函数2.1 特性3. 析构函数4. 拷贝构造函数5. 赋值操作符重载链接: link.1. 类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,编译器都会自动生成下面6个默认成员函数,如果写了,那就使用我们所写的。class Date {};2. 构造函数简单点说:完成初始化的工作。对于上述代码,如果我没有或者忘记了初始化就直接使用,是会出现大问题原创 2021-02-09 19:15:26 · 1200 阅读 · 0 评论 -
C++的类与对象初识
C++中的类与对象1. 面向过程和面向对象初步认识2. 类的引入3. 类的定义4. 类的作用域1. 面向过程和面向对象初步认识2. 类的引入3. 类的定义4. 类的作用域原创 2021-02-08 16:21:21 · 443 阅读 · 2 评论 -
C++入门语法(二)
C++入门语法一级目录二级目录三级目录C++入门语法(一):链接: link.一级目录二级目录三级目录原创 2021-02-01 20:11:51 · 229 阅读 · 0 评论 -
C++入门语法知识(一)
C++入门语法1. C++关键字(C++98)2. 命名空间2.1 命名空间的定义2.2 命名空间的使用3.C++输入&输出4. 缺省参数4.1 缺省参数概念4.2 缺省参数分类5. 函数重载1. C++关键字(C++98)C++总计63个关键字,C语言32个关键字ps:下面我们只是看一下C++有多少关键字,不对关键字进行具体的讲解。后面我们学到以后再细讲。2. 命名空间在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很原创 2021-01-31 19:58:02 · 585 阅读 · 1 评论