C++程序设计
文章平均质量分 93
c++
凌桓丶
现腾讯边缘存储研发工程师,前字节跳动流式计算研发工程师、CSDN博客专家。
展开
-
C++20的这些新特性,你都知道吗?
C++20的这些新特性,你都知道吗?原创 2022-04-28 15:04:17 · 3351 阅读 · 4 评论 -
一篇文章掌握C++17核心特性
C++ 17 新特性:折叠表达式、结构化绑定、类模板实参推导、内联变量、STL 并行算法、file_system、string_view、any 等原创 2022-04-25 09:00:00 · 1656 阅读 · 1 评论 -
C++14的这些新特性,你都知道吗?
C++14的这些新特性,你都知道吗?原创 2022-04-21 17:02:47 · 2133 阅读 · 0 评论 -
还搞不懂STL的type_traits?从源码来带你一起分析
文章目录什么是类型萃取?源码剖析SGI-STL G2.9版本类型萃取C++标准库类型萃取SFINAE机制与enable_ifconditional核心结构:integral_constant 与bool_constantis_same类型转换:remove/add_xx()实战分析:is_void什么是类型萃取?type_traits被称为类型萃取,主要用于在编译期计算、查询、判断、转换和选择,增强了泛型编程的能力,也增强了程序的弹性,使得我们在编译期就能做到优化改进甚至排错,能进一步提高代码质量。原创 2021-05-15 20:53:56 · 846 阅读 · 1 评论 -
海量数据处理(二) :常见海量数据处理方法
文章目录位图对于常见的海量数据处理方法,通常为以下几种,下面的题解也会围绕这几种解法展开位图 / 布隆过滤器字典树 / 倒排索引外部排序分治 / 哈希切割 + 堆 / 排序位图1. 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。当我们看到这样一个题目时,脑海中可能第一时间想到的就是排序 + 二分,但是要知道40亿个无符号整数所占据的内存空间达到了16G,这样的数据是无法放进内存中进行计算的,所以上面的方法无法实现。我们需要用位图来原创 2020-09-21 20:23:14 · 964 阅读 · 0 评论 -
C++11 lambda表达式、function类模板、bind函数适配器
文章目录lambda表达式lambda表达式的语法lambda表达式的原理function类模板bind函数适配器lambda表达式当我们在写代码的时候如果经常需要用到一个公用的功能,为了方便维护,通常就会通过重载类的operator ()来将其写成仿函数(具有函数特性的类)来使用。从使用的角度来讲,仿函数虽然好用,但是如果需要根据多种不同的情况设计多个函数的时候,这时候使用仿函数无疑是一种折磨,不仅仅代码量增加,而且还有大量的代码冗余。例如下面这种情况在我们使用购物网站的时候,通常都可以选择以原创 2020-09-06 20:19:17 · 816 阅读 · 3 评论 -
C++ 类型转换 :C语言的类型转换、C++的四种强制类型转换、explicit
文章目录原创 2020-07-30 17:41:43 · 879 阅读 · 0 评论 -
C++ 智能指针 :内存泄漏、 RAII、智能指针、auto_ptr、unique_ptr、shared_ptr、weak_ptr、定制删除器deleter
文章目录RAII内存泄漏智能指针auto_ptrunique_ptrshared_ptrweak_ptr定制删除器RAII内存泄漏智能指针auto_ptrnamespace lee{ /* c++98 auto_ptr 实现思路:管理权转移 缺陷:当管理权转移后会导致被转移的指针悬空,访问就会报错,如果不熟悉它的特性就会出问题。 */ template<class T> class auto_ptr { public: auto_ptr(T* pt原创 2020-07-29 16:34:49 · 1211 阅读 · 1 评论 -
C++ 特殊类设计:只能在堆、栈上创建的类、无法继承的类、无法拷贝的类、只能创建一个对象的类
文章目录请设计一个类,不能被拷贝请设计一个类,不能被继承请设计一个类,只能在堆上创建对象请设计一个类,只能在栈上创建对象请设计一个类,只能创建一个对象饿汉模式懒汉模式请设计一个类,不能被拷贝拷贝只会通过拷贝构造函数和赋值运算符重载来实现,所以只需要让该类无法调用这两样东西即可class CopyBan{public:private: /* c++98写法,私有化后外界就无法调用 CopyBan(const CopyBan&); CopyBan& operator=(co原创 2020-07-28 20:16:08 · 466 阅读 · 0 评论 -
C++11 右值引用 :左值与右值,右值引用,移动语义,move, 完美转发
文章目录左值与右值右值引用与左值引用移动语义move完美转发左值与右值左值和右值是C语言中的概念,但是C语言并没有很好的给出他们的区分方式,所以在早期时通常认为在等号的左边就是左值(能够取地址),在等号的右边就是右值(不能取地址)。但是这样的说法是不够准确的。例如这一段,a和b很明显都是左值,但是他们都能放在等号的左右两端。int main(){ int a = 1; int b = 2; a = b; b = a; return 0;}所以不能简单的根据等号的左右侧来进行划分原创 2020-07-24 21:52:04 · 1146 阅读 · 1 评论 -
C++ 面向对象(三)异常 :异常概念、异常的匹配规则、异常安全、异常体系
目录C语言传统的错误处理方法异常的概念异常的匹配规则异常安全异常规范异常体系C++标准库的异常体系自定义异常体系C语言传统的错误处理方法在C语言中,因为没有异常这个机制,所以出现错误时一般都是以下方式解决终止程序,例如断言assert,当出现错误时,就会调用一个exit()或者abort()终止程序。缺点:直接终止程序,而问题并没有得到处理,用户使用效果差错误码,例如大部分系统接口的正确返回0,错误返回1,而原本需要返回的数值一般放在参数中。也有一些是用全局变量errno来标记错误。缺点:需原创 2020-07-19 20:40:39 · 1626 阅读 · 0 评论 -
C++实现一个简易的线程池
C++实现一个简易的线程池原创 2020-05-18 16:41:26 · 2061 阅读 · 2 评论 -
海量数据处理(一) :位图与布隆过滤器的概念以及实现
目录位图位图概念位图的实现思路setresettest完整代码布隆过滤器布隆过滤器概念布隆过滤器的实现思路插入查找删除完整代码位图位图概念位图其实就是哈希的变形,他同样通过映射来处理数据,只不过位图本身并不存储数据,而是存储标记。通过一个比特位来标记这个数据是否存在,1代表存在,0代表不存在。位图通常情况下用在数据量庞大,且数据不重复的情景下判断某个数据是否存在。例如下面这道十分经典的题目给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。原创 2020-07-15 17:21:20 · 1527 阅读 · 2 评论 -
C++ 面向对象(二)多态 : 虚函数、多态原理、抽象类、虚函数表、继承与虚函数表
目录多态多态的概念多态的构成条件虚函数虚函数的重写协变(返回值不同)析构函数的重写(函数名不同)final和overridefinaloverride抽象类多态的原理多态多态的概念什么是多态呢?就是一种事物,多种形态。就是对于同一个行为,不同的对象去完成就会产生不同的结果。举个生活中的例子,当你去旅游景点游玩时,不同的身份买票的价格也不一样。比如对于普通人是原价购买,而对于学生和孩子则是半价购买,对于军人则是优先购买。明明同样是购买,不同身份带来的不同结果,就是多态的作用。在C++中,多态就是对原创 2020-06-12 19:03:24 · 1198 阅读 · 2 评论 -
C++ 面向对象(一)继承:继承、对象切割、菱形继承、虚继承、继承与组合
目录继承继承的概念继承方式基类与派生类的赋值转换作用域与隐藏派生类的默认成员函数友元与静态成员友元静态成员多继承菱形继承虚继承继承和组合什么是组合如何选择组合和继承继承继承的概念继承,是面向对象三大特性之一,是可以使代码复用的最重要的手段之一。我们可以在保持原有结构的基础上,在对类的功能进行进一步的拓展,使得创建和维护一个类变得更加的高效和简单当创建一个类时,我们可以继承一个已有类的成员和方法,并且在原有的基础上进行提升,这个被继承的类叫做基类,而这个继承后新建的类叫做派生类。继承的方法很简单原创 2020-06-08 08:12:00 · 1022 阅读 · 0 评论 -
C++ 泛型编程(二):非类型模板参数,模板特化,模板的分离编译
目录非类型模板参数模板的特化非类型模板参数模板的参数分为两种,一种是非类型参数,一种是类型参数。类型参数:则是我们通常使用的方式,就是在模板的参数列表中在class后面加上参数的类型名称。非类型参数:非类型参数则是用一个常量作为模板的参数,在模板中可以当作常量来使用,通常是需要指明大小或者初始化内容的才会用这种。比较常见的就是c++中的arrayarray的底层就是直接使用的数组,而数组创建时必须指明大小,并且大小得是个常量,所以就会用到非类型模板参数。注意:浮点数、、自定义类型、类对原创 2020-06-05 19:02:43 · 1045 阅读 · 1 评论 -
C++ 泛型编程(一):模板基础:函数模板,类模板,模板原理,模板匹配规则
类模板函数模板泛型编程泛型编程,泛型即是指具有在多种数据类型上皆可操作的含义,其实就是能够帮助开发者编写完全一般化并可重复使用的算法,同样的工作不需要做多次,同样的算法针对不同的类型也不应该写多次,所以需要通过某种途径,来使一个容器或者算法,能够兼容所有的类型,这就是泛型编程。void Swap(int& left, int& right) { int t...原创 2020-05-01 15:26:58 · 1215 阅读 · 1 评论 -
C++ 动态内存管理:c/c++的动态内存管理,new/delete,operator new/delete,placement-new, 内存泄漏
c/c++的动态内存管理new/deleteopeartor new/deleteplacement-new内存泄漏类的const成员 c/c++的动态内存管理在开始之前首先要了解c和c++的内存分布,我简单的画了一个图栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口...原创 2020-04-28 16:49:24 · 1354 阅读 · 0 评论 -
C++ 类和对象(三):构造函数补充、匿名对象、友元、内部类、类的static与const
构造函数补充匿名对象友元内部类类的static与const 构造函数补充列表初始化讲列表初始化之前,要先讨论一下构造函数里面的语句到底是不是初始化例子还是上次的日期类class Date{public: Date(int year, int month, int day) { _year = year; _month = month; _day = d...原创 2020-04-25 14:27:20 · 1004 阅读 · 1 评论 -
C++ 类和对象(二):构造函数、析构函数、拷贝构造函数、运算符重载
构造函数析构函数拷贝构造函数运算符重载 class Date{};可以看到,上面那个类没有任何成员,是一个空类,但是它真的什么都没有吗?其实一个类在我们不写的情况下,都会生成6个默认的成员函数分别是构造函数,析构函数,拷贝构造函数,赋值运算符重载,取地址运算符重载,对const对象取地址运算符的重载 构造函数构造函数是特殊的成员函数,它的主要功能就是初始化对象。和我...原创 2020-04-19 22:57:02 · 1079 阅读 · 0 评论 -
C++ 类和对象(一):类的概念、类的访问控制和封装、类对象模型、this指针
类的概念类的访问控制和封装类的对象模型this指针 类的概念在C++中,类可以说是最重要的东西,因为C++一开始的定位就是c with class,也正是因为引入了类,才让c++从c的面向过程思想转变为面向对象的思想,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。C++有两种能够创建类的方法struct第一种是struct,也就是从C继承而来的,在C语言中...原创 2020-04-17 21:07:30 · 629 阅读 · 1 评论 -
C++ 基础 : 函数重载、引用、内联函数、auto、范围for循环
函数重载引用内联函数auto范围for循环 函数重载C++中引入了一个新特性,函数重载。在同一个作用域下,对于相同的函数名,函数的参数不同,不同类型的参数顺序不同,参数的个数不同,都可以形成函数的重载(参数名不同,返回值不同不形成重载)函数的重载主要用于处理功能相同,类型不同的数据。例如int test(int i, int j){ cout << "t...原创 2020-04-10 22:52:54 · 1077 阅读 · 2 评论