
C++
文章平均质量分 87
C++语法,STL
想躺下的梅花鹿很迷人
勇气和执行力
展开
-
【C++中bitset的使用详解】
count和size。原创 2023-05-31 20:26:57 · 319 阅读 · 1 评论 -
【C++11多线程编程】向线程函数传递参数
【代码】【C++11多线程编程】向线程函数传递参数。原创 2023-05-28 17:01:44 · 386 阅读 · 0 评论 -
【C++从0到1】第二十五篇:类型转换
在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换。缺陷: 转换的可视性比较差,所有的转换形式都是以一种相同形式书写,难以跟踪错误的转换C风格的转换格式很简单,但是有不少缺点的:因此C++提出了自己的类型转化风格,注意因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格标准C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符:static_c原创 2022-07-09 16:50:50 · 409 阅读 · 2 评论 -
【C++从0到1】第二十四篇:特殊类设计
实现方式:二、请设计一个类,只能在栈上创建对象方法一:同上将构造函数私有化,然后设计静态方法创建对象返回即可。方法二:屏蔽new因为new在底层调用void* operator new(size_t size)函数,只需将该函数屏蔽掉即可。注意:也要防止定位new拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可原因:四、请设计一个类,不能被继承C++98方式C++11方法final关键字原创 2022-07-08 10:06:52 · 284 阅读 · 1 评论 -
【C++从0到1】第二十三篇:智能指针
下面我们先分析一下下面这段程序有没有什么内存方面的问题?二、内存泄漏2.1 什么是内存泄漏,内存泄漏的危害什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不=是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死C/C++程序中一般我们关心两种方面的内存泄漏总结一下:内存泄漏非常常见原创 2022-07-06 20:22:59 · 435 阅读 · 6 评论 -
【C++从0到1】第二十二篇:异常
传统的错误处理机制:实际中C语言基本都是使用返回错误码的方式处理错误,部分情况下使用终止程序处理非常严重的错误。异常是一种处理错误的方式,当一个函数发现自己无法处理的错误时就可以抛出异常,让函数的直接或间接的调用者处理这个错误如果有一个块抛出一个异常,捕获异常的方法会使用 try 和 catch 关键字。try 块中放置可能抛出异常的代码,try 块中的代码被称为保护代码。使用 try/catch 语句的语法如下所示:三、异常的使用3.1 异常的抛出和捕获异常的抛出和匹配原则:异常是通过抛出对象而引发原创 2022-07-05 20:53:56 · 388 阅读 · 11 评论 -
【C++从0到1】第二十一篇:C++11
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于TC1主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++1原创 2022-07-01 21:54:28 · 1045 阅读 · 13 评论 -
【C++从0到1】第二十篇:哈希(下)
给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。【腾讯】位图概念所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。1.1.3 位图的应用快速查找某个数据是否在一个集合中排序求两个集合的交集、并集等操作系统中磁盘块标记1.2 布隆过滤器1.2.1 布隆过滤器提出我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过的内容。问题来了,新闻客户端原创 2022-06-03 11:05:59 · 472 阅读 · 2 评论 -
【C++从0到1】第十九篇:哈希(上)
文章目录一、unordered系列关联式容器1.1 unordered_map1.1.1 unordered_map的文档介绍1.1.2 unordered_map的接口说明一、unordered系列关联式容器在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到 ,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器原创 2022-05-30 20:52:58 · 1090 阅读 · 15 评论 -
【C++从0到1】第十八篇:map和set
文章目录一、关联式容器二、键值对三、 树形结构的关联式容器3.1 set3.1.1 set的介绍3.1.2 set的使用3.2 multiset3.2.1 multiset的介绍3.2.2 multiset的使用3.3 map3.3.1 map的介绍3.3.2 map的使用一、关联式容器在初阶阶段,我们已经接触过STL中的部分容器,比如:vector、list、dequeforward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。那什么是关原创 2022-05-24 15:09:01 · 242 阅读 · 14 评论 -
【C++从0到1】第十七篇:多态
文章目录一、多态的概念1.1 概念二、 多态的定义及实现2.1 多态的构成条件2.2 虚函数2.3 虚函数的重写一、多态的概念1.1 概念多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。举个栗子:比如买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买票;军人买票时是优先买票。二、 多态的定义及实现2.1 多态的构成条件多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Per原创 2022-04-14 21:09:49 · 457 阅读 · 0 评论 -
【C++从0到1】第十六篇:继承
文章目录一、继承的概念及定义1.1继承的概念1.2 继承定义1.2.1定义格式1.2.2继承关系和访问限定符1.2.3继承基类成员访问方式的变化二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、 继承与静态成员七、复杂的菱形继承及菱形虚拟继承八、继承的总结和反思一、继承的概念及定义1.1继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承原创 2022-04-11 16:15:31 · 160 阅读 · 0 评论 -
【C++从0到1】第十五篇:IO流
文章目录一、C语言的输入与输出二、流是什么三、C++IO流3.1 C++标准IO流3.2 C++文件IO流一、C语言的输入与输出C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度输出控制。C语言借助了相应的缓冲区来进行输入与输出。如下图所示 对输入输出缓冲区的理解:1.可以屏蔽掉低级I/O的实现,低级I/O的实现原创 2022-04-07 16:58:23 · 240 阅读 · 0 评论 -
【C++从0到1】第十四篇:模板进阶
文章目录一、非类型模板参数二、模板的特化2.1 概念一、非类型模板参数模板参数分类类型形参与非类型形参。类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成 常量来使用。注意:浮点数、类对象以及字符串是不允许作为非类型模板参数的。非类型的模板参数必须在编译期就能确认结果。二、模板的特化2.1 概念通常情况下,使用模板可以实现一些与类型无关的代码,原创 2022-03-31 21:58:21 · 1043 阅读 · 0 评论 -
【C++从0到1】第十三篇:STL--stack&queue
文章目录一、stack的介绍和使用1.1 stack的介绍1.2 stack的使用1.3 stack的模拟实现二、queue的介绍和使用2.1 queue的介绍2.2 queue的使用一、stack的介绍和使用1.1 stack的介绍翻译:stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素原创 2022-03-30 16:04:21 · 478 阅读 · 1 评论 -
【C++从0到1】第十二篇:STL--list
文章目录一、list的介绍及使用1.1 list的介绍1.2 list的使用1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity1.2.4 list element access1.2.5 list modifiers1.2.6 list的迭代器失效二、list的模拟实现一、list的介绍及使用1.1 list的介绍list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双.原创 2022-03-23 15:33:31 · 334 阅读 · 2 评论 -
【C++从0到1】第十一篇:STL--vector
文章目录一、vector的介绍及使用1.1 vector的介绍1.2 vector的使用1.2.1 vector的定义1.2.2 vector的遍历1.2.3 vector 空间增长问题一、vector的介绍及使用1.1 vector的介绍vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vect原创 2022-03-15 21:24:53 · 238 阅读 · 0 评论 -
【C++从0到1】第十篇:STL--string类模拟实现(下)
文章目录一、传统版写法的string类二、现代版写法的string类三、string类的模拟实现在面试中,面试官总喜欢让学生自己来模拟实现string类,最主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数。一、传统版写法的string类namespace ts{ class string { public: //s1("hello world"); string(const char* str) :_str(new char[strlen(str) + 1]原创 2022-03-10 22:01:01 · 282 阅读 · 0 评论 -
【C++从0到1】第九篇:STL--string类(上)
文章目录一、为什么要学习string类1.1 C语言中的字符串二、标准库中的string类2.1 string类(了解)2.2 string类的常用接口说明一、为什么要学习string类1.1 C语言中的字符串C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。二、标准库中的string类2.1 string类(了解)字符..原创 2022-03-05 21:13:31 · 690 阅读 · 0 评论 -
【C++从0到1】第八篇:STL简介
文章目录一、什么是STL二、 STL的版本三、 STL的六大组件四、 如何学习STL六、STL的缺陷一、什么是STLSTL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。二、 STL的版本原始版本Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件..原创 2022-03-04 20:38:47 · 203 阅读 · 0 评论 -
【C++从0到1】第七篇:模版初阶
文章目录一、泛型编程二、函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化一、泛型编程如何实现一个通用的交换函数呢?如果是char,也可以再写一个关于char的函数,那么其他类型也可以通通写关于他们的函数,因为他们都构成函数重载。使用函数重载虽然可以实现,但是有一下几个不好的地方:重载的函数仅仅只是类型不同,代码的复用率比较低,只要有新类型出现时,就需要增加对应的函数代码的可维护性比较低,一个出错可能所有的重载均出错那能否告诉编译器一个模子..原创 2022-02-28 13:41:09 · 109 阅读 · 0 评论 -
【C++从0到1】第六篇:C/C++内存管理
文章目录一、C/C++内存分布二、C语言中动态内存管理方式2.1 malloc/calloc/realloc和free三、C++内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型一、C/C++内存分布我们先来看下面的一段代码和相关问题int globalVar = 1;static int staticGlobalVar = 1;void Test(){ static int staticVar = 1; int localVar =原创 2022-02-21 16:47:34 · 303 阅读 · 0 评论 -
【C++从0到1】第五篇:类和对象(下)
文章目录一、再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字二、static成员2.1 概念2.2 特性三、C++11 的成员初始化新玩法四、友元4.1 友元函数4.2 友元类五、内部类5.1概念及特性六、再次理解封装七、再次理解面向对象一、再谈构造函数1.1 构造函数体赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值class Date{public:Date(int year, int month, int day){原创 2022-01-31 18:00:00 · 456 阅读 · 3 评论 -
【C++从0到1】第四篇:类和对象(中)
文章目录一、类的6个默认成员函数二、构造函数2.1 概念2.2 特性三、析构函数3.1 概念3.2 特性四. 拷贝构造函数4.1 概念4.2特征五、赋值运算符重载5.1 运算符重载5.2 赋值运算符重载一、类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。class Date {};二、构造函数2.1 概念对于以下的日期类:#include <iostream>#incl原创 2022-01-25 18:39:01 · 502 阅读 · 8 评论 -
【C++从0到1】第三篇:类和对象(上)
文章目录一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装4.1 访问限定符4.2 封装五、类的作用域六、类的实例化七、类对象模型7.1 如何计算类对象的大小7.2 类对象的存储方式7.3 结构体内存对齐规则一、面向过程和面向对象初步认识C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。二、类的引入首先来看一个最简单的类:C语言中,结构体中只能定原创 2022-01-19 13:02:55 · 323 阅读 · 13 评论 -
【C++从0到1】第二篇:C++入门(下)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、 extern “C”1.1C++程序调用C库二、使用步骤1.引入库2.读入数据总结一、 extern “C”有时候在C++工程中可能需要将某些函数按照C的风格来编译,在函数前加extern “C”,意思是告诉编译器,将该函数按照C语言规则来编译。比如:tcmalloc是google用C++实现的一个项目,他提供tcmallc()和tcfree两个接口来使用,但如果是C项目就没办法使用,那么他就使用extern “C”来原创 2022-01-15 10:47:17 · 651 阅读 · 0 评论 -
【C++从0到1】第一篇:C++入门(上)
文章目录一、 C++关键字二、命名空间2.1 命名空间定义2.1 命名空间的使用三、C++输入&输出四、缺省参数4.1 缺省参数概念4.2 缺省参数分类五、 函数重载5.1 函数重载概念5.2 名字修饰(name Mangling)一、 C++关键字C++总计63个关键字,C语言32个关键字下面我们只是看一下C++有多少关键字,不对关键字进行具体的讲解。二、命名空间在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致..原创 2021-12-01 11:54:13 · 303 阅读 · 2 评论