C++
文章平均质量分 90
C++取经之路
UrSpecial
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++异步编程
本文介绍了C++中的异步编程机制,重点解析了并发与并行的核心区别(逻辑同时vs物理同时)。详细讲解了std::future/std::async的异步结果获取机制,演示了std::promise的线程间值传递,以及std::shared_future的共享结果特性。还说明了std::packaged_task对可调用对象的封装方法。通过多个代码示例,展示了这些工具在异步任务启动、结果获取和线程间通信中的具体应用场景及实现方式。原创 2025-09-30 14:59:06 · 677 阅读 · 0 评论 -
智能指针:C++内存管理的现代解决方案
如果要用一句话来定义智能指针的话,就是:智能指针 = 对象化指针 + 自动生命周期管理。智能指针它实际上就是一个封装了原始指针的类模板,然后通过RAII机制来确保内存安全。RAII:核心就是将资源的生命周期与对象的生命周期进行绑定,确保对象在离开作用域时能够自动释放其资源。原创 2025-05-10 19:29:00 · 903 阅读 · 0 评论 -
【C++取经之路】lambda和bind
引用一位大佬的一句话——“Use lambdas if you can, and std::bind if you must.”这句话出自 Scott Meyers 的经典著作《Effective Modern C++》,书中明确指出:与 std::bind相比,lambda几乎在所有方面更优越。原创 2025-04-11 15:30:29 · 1551 阅读 · 0 评论 -
【C++取经之路】红黑树封装set
本文参考《STL源码剖析》中SGI STL对红黑树的结构设计,涉及到红黑树迭代器的实现等,所以在读这篇文章之前,我希望你对红黑树有一定的了解,比如在红黑树插入时的变色和旋转操作,最好自己实现过。不然这篇文章对你可能不太友好,因为本文对红黑树的结构设计较为复杂,插入时的操作细节不会在本文详细说明。说实话,封装set对其实很简单,难点在于前期的红黑树设计上,在设计上的一些细节还是很有挑战的。下面我们进入正题,一起领略写SGI STL的大佬们的风采。//旋转时需要访问父节点//颜色//数据域{}原创 2024-09-24 23:38:23 · 867 阅读 · 0 评论 -
【C++取经之路】map的详细介绍及其使用
理论元素这个名词是出自文档的,我只是知识的搬运工。其实这个底层的红黑树的设计有关。大概是这样子的:它有一个哨兵位结点(上方的),两边的就是理论元素了。原创 2024-09-05 21:32:51 · 1146 阅读 · 0 评论 -
【C++取经之路】set的详细介绍及其使用
再谈容器,先问一个问题:何为容器?《STL源码剖析》一书中是这么解释的——容器,置物之所也。根据“数据在容器中的排列”特性,容器可以分为序列式容器和关联式容器两种。序列式容器,其底层为线性序列的数据结构,里面存储的是数据本身。关联式容器,其底层是红黑树(一种平衡搜索树),里面存储的是结构的键值对,也是存储数据本身的。set和map均为关联式容器。原创 2024-09-05 14:59:04 · 1037 阅读 · 0 评论 -
【C++入门】内存管理
6)申请自定义类型时,malloc和free只会开辟和释放空间,不会调用构造函数与析构函数,而new在申请空间时会调用构造函数完成对象的初始化,delete在释放空间前,会调用析构函数完成对象中资源的清理。3)malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可,如果是多个对象,在[ ]中指定即可。用户可使用系统接口创建共享共享内存,做进程间通信。2)new和delete申请和释放的是单个元素的空间,new[ ]和delete[ ]申请和释放的是连续的多个元素空间。原创 2024-04-22 00:00:35 · 692 阅读 · 0 评论 -
【C++取经之路】继承
在C++中,继承是一种面向对象编程的重要特性,它允许一个类(称为派生类或子类)继承另一个类(称为基类或父类)的成员变量(通常称为属性)和成员函数(通常称为方法)。通过这种方式,派生类可以重用基类的代码,并且可以添加或覆盖基类中的方法。根据继承的基类的数量,C++中的继承可以分为单继承和多继承。单继承:指一个派生类只从一个基类派生的情况。多继承:指一个派生类从多个基类派生的情况。单继承:继承,它是一种“is-a”的关系,也就是说派生类是一个特殊的基类。原创 2024-06-13 22:25:24 · 992 阅读 · 2 评论 -
【C++取经之路】多态及其原理
多态,通俗的说就就是多种形态,也就是说,不同的对象去完成同一行为时会产生不同的形态。比如,买高铁票,学生的话是可以打75折的,而非学生的成年人就是全价买票了。在虚函数的后面加上 =0,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类)。抽象类不能实例化出对象。继承自抽象类的派生类,如果派生类中不对纯虚函数进行重写,那么派生类就包含了纯虚函数,它便是抽象类,不能实例化出对象。纯虚函数规范了派生类必须重写,另外纯虚函数更体现出了接口继承。class Carpublic://纯虚函数。原创 2024-07-18 01:22:38 · 1053 阅读 · 0 评论 -
【C++入门】类和对象
类的定义格式:class 类名/ /类体:由成员函数和成员变量组成/ / ……/ /分号不能少class为定义类的关键字。类体中的内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或成员函数。如果成员函数在类中声明和定义,那么编译器可能会把它当做内联函数处理。原创 2024-04-02 00:23:23 · 1130 阅读 · 0 评论 -
【C++入门】类的6个默认成员函数、运算符重载、初始化列表、const成员、static成员
在对象实例化时通过上述的构造函数后,类的成员变量有了一个初值,但这并不是初始化,严格来说,应该是赋值,因为在函数体内,可以给同一变量多次赋值,但每一个变量的初始化只有一次,所以,在函数体内给值根本不叫初始化。上面我们说过,初始化列表是用来给成员变量初始化的,具体的说,是用来给实例化出的对象中的变量初始化的,而静态成员为所有类对象共享,不属于某个具体对象,所以它不是在初始化列表初始化的。不可以,const对象中的成员是不可以修改的,而非const对象中的成员是可以修改的,这是典型的。原创 2024-04-20 13:00:47 · 1197 阅读 · 0 评论 -
【C++】函数模板和类模版
函数模板和类模板是C++模板编程中的两个核心概念,它们允许程序员编写泛型代码,这些代码可以在多种数据类型上工作,而无需为每个数据类型编写单独的实现。这提高了代码的可复用性和灵活性。所以说,模板还是很重要的。【优点】1)复用了代码,更快的迭代开发,C++标准模板库STL因此产生。2)增强了代码的灵活性。【缺点】1)模板会导致代码膨胀问题,也会导致编译时间变长。2)出现模板编译错误时,错误信息非常凌乱,不易定位错误。【模板导致编译时间变长的几个原因】1)类型推导模板在编译阶段需要进行类型推导。原创 2024-06-09 16:59:37 · 1125 阅读 · 2 评论 -
push_back()和emplace_back()的区别
emplace_back()向容器末尾添加元素时,直接在容器内部构造这个元素,而不是先构造一个对象再拷贝或移动到容器中。在底层实现时,emplace_back()的参数会被转发到容器内部新元素的构造函数中。这意味着元素的构造直接在容器的内存位置上进行,避免了不必要的复制或移动操作。push_back()向容器末尾添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中。push_back() -> 构造 + 拷贝构造 / 构造 + 移动。emplace_back() -> 构造。原创 2024-09-01 15:22:25 · 314 阅读 · 0 评论 -
【C++】string类常用函数用法总结
const char& operator[] (size_t pos) const,const_iterator begin() const,const_iterator end() const,const修饰*this,即this指针指向的内容,所以this指针指向的内容不可修改,用法上和其他函数是一样的。resize(size_t n)和resize(size_t n, char c)都是将字符串的有效个数改变到n个,不同的是,当使用 std::string::resize(size_t n)原创 2024-05-13 12:39:13 · 960 阅读 · 0 评论 -
【C++入门】输入输出、命名空间、缺省参数、函数重载、引用、内联函数、auto、基于范围的for循环
命名空间的定义需要用到关键字namespace,格式为:namespace 命名空间的名字/ /……命名空间中可以定义变量、函数、类等。原创 2024-03-31 21:33:20 · 1001 阅读 · 2 评论
分享