
C++学习-笔记
文章平均质量分 92
C++学习
冰果滴
Goal
展开
-
C++的IO流
在C语言中,如果想要将一个整形变量的数据转化为字符串格式,如何去做?①. 使用itoa()函数② 使用sprintf()函数但是两个函数在转化时,都得需要先给出保存结果的空间,那空间要给多大呢,就不太好界定,而且转化格式不匹配时,可能还会得到错误的结果甚至程序崩溃。在C++中,可以使用stringstream类对象来避开此问题。在程序中如果想要使用stringstream,必须要包含头文件。原创 2022-11-06 20:09:43 · 375 阅读 · 0 评论 -
C++ 特殊类设计
一些对于类的设计,比如单例模式等,是比较有用的一种特殊类的设计。原创 2023-03-01 19:38:41 · 798 阅读 · 0 评论 -
C++类型转换
在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换。,每次使用强制类型转换前,程序员应该仔细考虑是否还有其他不同的方法达到同一目的,如果非强制类型转换不可,则应限制强制转换值的作用域,以减少发生错误的机会。static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用,但它不能用于两个不相关的类型进行转换。原创 2022-10-10 20:52:10 · 347 阅读 · 0 评论 -
C++智能指针
智能指针在C++11出了以后就很好用了,新增的unique_ptr和shared_ptr都很好用。原创 2022-10-04 06:00:00 · 1788 阅读 · 0 评论 -
C++异常
在实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法做了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了{// 服务器开发中通常使用的异常继承体系{public:{}{}{}// 描述错误信息int _id;// 错误编码// 堆栈信息};{原创 2022-10-02 12:53:38 · 1721 阅读 · 0 评论 -
C++11重要知识点介绍
这里包括了上一篇中所没有介绍的一些重要的C++11知识点。原创 2022-09-30 06:00:00 · 1667 阅读 · 0 评论 -
C++11一些零碎的知识点介绍
这里都是C++11的一些相对比较零碎或者简单的知识点,而一些重要的知识点(比如右值引用、lambda表达式、智能指针等之后再介绍)原创 2022-09-29 06:00:00 · 684 阅读 · 0 评论 -
哈希的应用
位图是根据哈希思想来通过bit位存储某种状态的,是适用于海量数据的情况。布隆过滤器是为了解决除整型外其它类型的海量数据的情况,思想与位图相同。哈希切割则是另一个对大文件进行哈希切分成多个小文件的思想。原创 2022-09-19 14:37:57 · 702 阅读 · 0 评论 -
C++ 哈希表及unordered_set + unordered_map容器
前言:unordered_set和unordered_map是C++11中新增加的两个关联式容器,使用方式与set和map基本相同,但是unordered_set和unordered_map的底层是哈希表,而set和map的底层是红黑树。并且unordered_set不能排序;unordered_set和unordered_map是单向迭代器;效率要高一下,时间复杂度为O(1)。原创 2022-09-14 13:45:05 · 3364 阅读 · 0 评论 -
深入理解 红黑树【满足红黑树5条规则】
在学习红黑树之前,我们最好先学习一下AVLTree,并且这两个平衡二叉搜索树的难度差不多,学过了AVLTree之后,红黑树就会更加轻松一些。红黑树只是比较抽象一些,在调整方面较AVLTree要简单一些。......原创 2022-08-07 09:43:43 · 1170 阅读 · 0 评论 -
深入理解AVLTree【旋转控制平衡(单旋、双旋)】
二叉树是数据结构的重要一部分,而作为平衡二叉搜索树的AVLTree和红黑树学习起来是比较难的,但是我们需要去了解它们的思路(在学习的过程中,我们最好通过画图去更深入的理解,然后根据自己的图来完成代码实现)在学习AVLTree之前建议先去学习一下set和map(了解KV模型,键值对等)......原创 2022-08-05 11:40:02 · 1256 阅读 · 0 评论 -
C++ 关联式容器map+set
目录一.关联式容器1.关联式容器 2.树形结构的关联式容器二.键值对 三.set1.介绍2.set的使用1.set的模板参数列表2.构造3.迭代器4.容量操作5.增删查操作四.map1.介绍2.map的使用1.map的模板参数说明2.构造3.迭代器4.容量操作与元素访问5.增删查改操作五.multiset和multimap1.multiset介绍2.multimap介绍六.红黑树改造1.节点内部2.增加仿函数3.增加迭代器七.set模拟实现(封装改造红黑树)八.map模拟实现(封装改造红黑树)九.模拟实现原创 2022-08-08 12:58:35 · 3968 阅读 · 0 评论 -
C++ 二叉搜索树BinarySearchTree
二叉搜索树是为学习map和set做的铺垫,了解了二叉搜索树的特性,有助于更好的理解map和set。原创 2022-07-30 09:00:00 · 1152 阅读 · 0 评论 -
C++ 多态
①两个函数在同一作用域②函数名/参数相同①两个函数分别在基类和派生类的作用域②函数名相同③两个基类和派生类的同名函数不构成重写就是重定义。原创 2022-07-27 09:00:00 · 776 阅读 · 0 评论 -
C++ 继承
继承机制是面向对象程序设计中使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程,以前接触的复用都是函数复用,继承是类设计层次的复用。Student派生类public继承方式Person基类。...原创 2022-07-24 10:47:21 · 678 阅读 · 1 评论 -
C++ 模板进阶(模板的特化)
这里我们再次学习模板,这次是进阶模板,要比上次所学的模板更深一些,包括非类型模板参数以及函数模板的特化、类模板的全特化、偏特化等。原创 2022-07-22 23:12:41 · 1970 阅读 · 0 评论 -
C++ stack和queue类(容器适配器),以及优先级队列(堆)(仿函数)
①stack是一种容器适配器,专门用在具有后进先出操作的环境中,其删除只能从容器的一端进行元素的插入与提取操作。②stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。③stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作empty判空操作back获取尾部元素操作push_back尾部插入元素操作pop_back。.........原创 2022-07-21 06:00:00 · 656 阅读 · 0 评论 -
C++ list类(包括反向迭代器适配器的实现)
前言list类的学习,可以仿照之前的string类和vector类。(这里的反向迭代器是一个适配器,适配正向迭代器)原创 2022-07-18 20:22:11 · 2900 阅读 · 1 评论 -
C++ vector类
目录一.vector使用1.vector构造2.vector迭代器使用3.vector容量操作4.vector增删查改二.vector迭代器失效问题三.memcpy拷贝问题四.vector分部模拟实现 1.私有成员2.typedef3.3种构造函数4.拷贝构造、赋值运算符重载函数5.析构函数6.迭代器7.大小、容量8.reserve函数9.resize函数10.尾插、尾删函数11.下标运算符重载函数12.插入函数13.删除函数14.清理函数 五.vector类模拟实现总代码前言:vector类的学习,可以模原创 2022-07-15 08:00:00 · 5047 阅读 · 0 评论 -
C++ string类(包括深浅拷贝)
目录一.字符码表一.为什么用string类二.使用标准库中的string类1.string类2.string中的常用接口说明(1)string类对象的常见构造(2)string类对象访问及遍历操作(3)string类对象遍历方式(4)string类对象的容量操作(5)string类对象的修改操作(6)string类非成员函数三.浅拷贝与深拷贝1.浅拷贝2.深拷贝四.string类的分部模拟实现(包括传统写法和现代写法)1.私有成员2.构造函数3.拷贝构造函数(1)传统写法(2)现代写法4.赋值运算符重载(1原创 2022-07-04 19:25:17 · 6601 阅读 · 0 评论 -
C++ STL简单介绍(接下来将开始学习STL)
目录一.STL概念二.STL版本1.原始版本2.P.J.版本3.RW版本4.SGI版本三.STL六大组件四.STL缺陷 前言:STL对于C++来说很重要,STL是C++中的优秀作品,有了STL,许多底层的数据结构以及算法都不需要自己重新写。 这一篇是为了接下来学习STL做简单的介绍与铺垫。STL是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 在惠普实验室完成的原始版本,是开源的,允许任何人任意运用、拷贝、修改、传播、商业使用。HP原创 2022-06-05 12:35:31 · 504 阅读 · 0 评论 -
C++ 模板(函数模板、类模板)
一.泛型编程现在,我们要是想实现一个通用的交换函数,只能使用函数重载: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;}// ...使用函数重载虽然可以实原创 2022-06-01 14:01:23 · 1337 阅读 · 1 评论 -
C++ 动态内存管理(new / delete)【含练习题】
前言:这节类似于C语言的动态管理。这里会与C语言的malloc等进行对比,同时这里也会介绍new和delete的实现原理。一.内存分布①栈:又叫堆栈,是非静态变量/函数参数/返回值等等,栈是向下增长的②内存映射段:是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享,共享内存,做进程间通信③堆:用于程序运行时动态内存分配,堆是向上增长的④数据段:存储全局数据和静态数据⑤代码段:可执行的代码/只读常量int globalVar = 1;sta原创 2022-05-28 08:00:00 · 1167 阅读 · 0 评论 -
C++ 类与对象(3)
前言:上一篇写了关于类与对象的重点内容,这一篇则是对类与对象剩下的一些知识点的补充,相对比较简单。上一篇:C++ 类与对象(2)_糖果雨滴a的博客-优快云博客一.构造函数补充1.构造函数体赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。虽然构造函数调用之后,对象中已经有了一个初始值,但是不能将其称作为类对象成员的初始化,构造函数体中的语句只能将其称作为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。2.初始化列表原创 2022-05-24 23:31:37 · 297 阅读 · 0 评论 -
C++ 类与对象(2)
前言:上一篇写了关于类与对象一些比较基础的知识点,这一篇则是类与对象的重点,包括构造函数、析构函数、拷贝构造函数、操作符重载等类与对象非常重要的知识点。上一篇:C++ 类与对象(1)_糖果雨滴a的博客-优快云博客一.类的6个默认成员函数如果一个类中什么成员都没有,简称为空类,但是空类中并不是什么都没有,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。6个默认成员函数:(1)初始化和清理①构造函数:主要完成初始化工作②析构函数:主要完成清理...原创 2022-05-23 11:22:04 · 333 阅读 · 1 评论 -
C++ 类与对象(1)
一.面向过程和面向对象我们学习过了C语言,而C++则是在C语言的基础上,增加了类等概念。C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。二.结构体与类C语言中,结构体只能定义变量。在C++中,结构体不仅可以定义变量,也可以定义函数。// C++兼容C struct的用法// C++同时对struct进行了升级,把struct升级成了类// ...原创 2022-05-16 09:54:25 · 623 阅读 · 0 评论 -
C++ 入门知识点(重载、引用、内联等)(学习类与对象的基础)
前言:这是c++的第一篇,这个是下一篇学习类和对象的基础,我们应该好好理解。同时在理解的基础上,我们也要去关注c++的底层实现,这里的函数重载就通过对c++的底层原理进行分析,来得到函数重载的原理。这里相对比较难理解一些,但是我们依旧要去掌握。一.C++关键字C++一共有63个关键字,其中包括了C语言的32个关键字。asm do if return try continue auto double inline short typed原创 2022-05-13 14:51:42 · 680 阅读 · 2 评论