
C++学习分享
文章平均质量分 81
JDSZGLLL
努力学习编程的小孙
展开
-
C++:IO流
在程序中如果想要使用stringstream,必须要包含头文件。在该头文件下,标准库三个类: istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操 作,本文主要介绍stringstream。// 序列化和反序列化// 名字int _id;// 时间// 聊天信息int main()原创 2023-04-24 10:33:21 · 496 阅读 · 0 评论 -
C++关于线程的一些操作
std::this_thread::get_id()获取当前线程的线程IDstd::this_thread::yield()让步结束当前线程的时间片。原创 2023-04-23 17:20:07 · 654 阅读 · 0 评论 -
C++类型转换
因此C++提出了自己的类型转化风格,注意因为C++要兼容C语言,所以C++中还可以使用C语言的 转化风格。原创 2023-04-23 10:36:20 · 462 阅读 · 1 评论 -
C++:特殊类设计
拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,。将拷贝构造函数与赋值运算符重载只声明不定义,并且将其访问权限设置为私有即可。C++11扩展delete的用法,delete除了释放new申请的资源外,如果在默认成员函数后跟上 =delete,表示让编译器删除掉该默认成员函数。原创 2023-04-23 10:06:52 · 398 阅读 · 0 评论 -
C++:智能指针(auto_ptr/unique_ptr/shared_ptr/weak_ptr)
C++没有垃圾回收机制。在多次new时有可能抛异常,就需要一层一层捕获异常并释放资源还需要条件判断,非常麻烦,否则抛异常之后delete多了或者少了都不行。一不小心就内存泄露了。原创 2023-04-19 22:08:57 · 456 阅读 · 0 评论 -
C++:异常
1. 终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。2. 返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通 过把错误码放到errno中,表示错误 实际中C语言基本都是使用返回错误码的方式处理错误,部分情况下使用终止程序处理非常严重的 错误。原创 2023-04-17 22:20:00 · 327 阅读 · 0 评论 -
C++11: lambda、包装器、模板参数包和线程库
在C++98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法。随着C++语法的发展,人们开始觉得上面的写法太复杂了,每次为了实现一个algorithm算法, 都要重新去写一个类,如果每次比较的逻辑不一样,还要去实现多个类,特别是相同类的命名, 这些都给编程者带来了极大的不便。因此,在C++11语法中出现了Lambda表达式。原创 2023-04-17 17:29:25 · 399 阅读 · 0 评论 -
C++:右值引用详解
传统的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,所以从现在开始我们 之前学习的引用就叫做左值引用。无论左值引用还是右值引用,都是给对象取别名。什么是左值?什么是左值引用?左值是一个表示数据的表达式(如变量名或解引用的指针),我们。定义时const修饰符后的左 值,不能给他赋值,但是可以取它的地址。左值引用就是给左值的引用,给左值取别名。右值等等,右值可以出现在赋值符号的右边,但是不能出现出现在赋值符号的左边,右值。右值引用就是对右值的引用,给右值取别名。原创 2023-03-31 20:54:52 · 651 阅读 · 0 评论 -
C++11新增小语法
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了 C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞 进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。C++11增加的语法特性非常篇幅非常多,我们这里没办法一 一讲解,所以本节课程 主要讲解实际中比较实用的语法。原创 2023-03-30 10:57:24 · 220 阅读 · 0 评论 -
哈希应用:位图和布隆过滤器
所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用 来判断某个数据存不存在的。原创 2023-03-16 11:53:42 · 455 阅读 · 0 评论 -
C++:哈希结构(内含unordered_set和unordered_map实现)
1. unordered_map是存储键值对的关联式容器,其允许通过keys快速的索引到与 其对应的value。2. 在unordered_map中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此 键关联。键和映射值的类型可能不同。3. 在内部,unordered_map没有对按照任何特定的顺序排序, 为了能在常数范围内 找到key所对应的value,unordered_map将相同哈希值的键值对放在相同的桶中。原创 2023-03-15 16:49:59 · 483 阅读 · 0 评论 -
C++:set和map(模拟实现)
1. set是按照一定次序存储元素的容器2. 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。3. 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行 排序。4. set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对 子集进行直接迭代。原创 2023-03-06 14:42:00 · 779 阅读 · 3 评论 -
二叉树前中后序遍历的非递归版本
非递归遍历二叉树的思路有很多,这里用到的思路有一个优点,前中后序遍历的思路大差不差。我们这里用到的思路就一条,将任何一棵树分为两个部分:1.左路节点2.左路节点的右子树。原创 2023-02-08 21:45:48 · 133 阅读 · 0 评论 -
二叉搜索树(Binary Search Tree)
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树。原创 2023-02-07 21:21:21 · 907 阅读 · 0 评论 -
C++的多态
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了 Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件1. 必须通过基类的指针或者引用调用虚函数2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写public:// 虚函数virtual void BuyTicket() { cout原创 2023-02-06 16:57:01 · 434 阅读 · 0 评论 -
C++的继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保 持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象 程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。原创 2023-02-05 20:53:37 · 414 阅读 · 0 评论 -
模板进阶(包含特化)
模板参数分类类型形参与非类型形参。类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。以上是利用类封装的静态数组。1. 浮点数、类对象以及字符串是不允许作为非类型模板参数的。2. 非类型的模板参数必须在编译期就能确认结果。原创 2023-02-03 21:34:23 · 430 阅读 · 0 评论 -
STL模拟实现——stack、queue和priority_queue(适配器、仿函数、反向迭代器)
适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总 结),该种模式是将一个类的接口转换成客户希望的另外一个接口。下列的这些stack、queue和priority_queue以及反向迭代器都是适配器。原创 2023-02-02 21:00:07 · 384 阅读 · 0 评论 -
STL模拟实现——list
1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高 效。4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率 更好。原创 2023-01-04 21:00:10 · 410 阅读 · 0 评论 -
STL模拟实现——vector
vector模拟实现原创 2022-12-11 14:51:56 · 179 阅读 · 0 评论 -
STL模拟实现——string
在模拟实现的string中npos是静态成员变量,而且只有整型变量可以在类中定义,其他静态变量只能在全局域定义。我们可以看出,改进后避免了在小容量区间频繁地插入和扩容,已空间换时间,提高了效率。迭代器的出现是为了不同的数据结构可以采用统一的方法去遍历数据,降低了使用成本。上面我们自己模拟实现的string与官方提供的,最后运行结果完全一样。而且两个插入函数要非常注意边界条件,特别是pos==0的情况。string的迭代器非常简单,使用原生指针重命名就可以了。让我们先来看看官方的迭代器是怎么使用的。原创 2023-01-04 13:01:07 · 345 阅读 · 0 评论 -
C++模板
泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。原创 2022-10-22 21:20:35 · 111 阅读 · 0 评论 -
C&C++ 内存管理
C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力,而且使用起来比较麻烦,因 此C++又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。原创 2022-10-20 16:42:13 · 125 阅读 · 0 评论 -
类和对象一些知识点的补充
大厂面试必考的C++类和对象的补充知识原创 2022-10-17 13:48:43 · 469 阅读 · 1 评论 -
C++:日期类的构建
这是一篇练习博客,在学习和初步熟悉了类的构建,以及类的六个默认构造函数之后,构建了一个日期类,对日期进行各种操作。原创 2022-09-26 17:18:59 · 222 阅读 · 0 评论 -
C++类的6个默认成员函数
6个默认成员函数是学习C++绕不过去的一个坎,其中的知识相当的细碎繁琐,许多同学在学习的过程中往往又不求甚解,这对于我们深入理解和运用C++是非常不利的。本篇博客将会详细描述这六个函数,把它们剖析得明明白白。......原创 2022-07-23 23:08:45 · 884 阅读 · 16 评论 -
C++基础细碎知识整理
这是本人在学习C++之初对于C++一些基础细碎知识的理解和总结,分享出来,希望他山之石,可以攻玉。原创 2022-06-22 15:04:33 · 393 阅读 · 11 评论