![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++
文章平均质量分 83
总结C/C++在学习过程遇到问题与理解
温逗死
一名假装努力的小学生
展开
-
虚函数表是什么时候生成的,虚函数表地址是什么时候给对象的?
虚函数指针:出于效率考虑,会放在每个对象的地址开始处。虚函数表:属于类,类的所有对象共享这个类的虚函数表。原创 2022-08-16 14:59:51 · 2510 阅读 · 5 评论 -
const 引用作为形参,实际上也是有拷贝存在的
const 引用作为形参,实际上也是有拷贝存在的。原创 2022-08-14 13:39:49 · 311 阅读 · 0 评论 -
priority_queue 第三个模板参数和sort 的第三个形参的区别
priority_queue 需要的是类型,根据类型,自己类内部定义对象来做;sort 需要的就直接是对象;根据传入对象来实现比较;(仿函数对象,自定义函数对象)传入greater 就是传入类型,因为这只是个类;传入greater() (带括号) 就是构造了一个这个类的对象,传入的是对象;...原创 2022-08-14 11:30:12 · 164 阅读 · 0 评论 -
STL中sort 用的是快排吗? - 快排、堆排(heap sort)、插入排序
STL中,大数据排序时候,首选了快排;递归深度到达一定程度的时候,选择了堆排;(允许1.5 log2(N) 的递归深度)数据量小到一定程度的时候,选择插入排序;(小于32个数据时候)原创 2022-08-13 10:07:55 · 251 阅读 · 0 评论 -
C++ 内存管理 - malloc/free - 侯捷
malloc/free是C层面的函数原创 2022-07-01 22:37:28 · 858 阅读 · 0 评论 -
C++ 内存管理 - std::allocator - 侯捷
alloc原创 2022-06-29 15:41:25 · 1060 阅读 · 0 评论 -
C++ 内存管理 - primitives - 侯捷
C/C++中的new和delete的实现过程原创 2022-06-27 21:16:36 · 307 阅读 · 0 评论 -
C++11新特性 - 侯捷
侯捷 C++11/14原创 2022-06-25 22:50:39 · 484 阅读 · 0 评论 -
C/C++中的new和delete的实现过程
下面是《C++ Primer 5th》中P726 对 new 和 delete 过程的解释:当我们使用一条new表达式时,实际上执行了三步操作:当我们使用一条delete表达式时,实际上执行了两步操作:由于不同编译器对new的实现过程不同,所以我们下面以侯捷老师课件来进行详解。假设我们现在有一个类:complex.h我们new一个对象编译器处理new这一语句的时候,先分配复数的内存,然后进行转型,最后调用构造函数,进行了下面三个过程下面是在VS2019上反汇编得到:整体示意图如下:当我们进行 del原创 2022-06-24 15:45:28 · 1242 阅读 · 1 评论 -
C/C++多态/虚函数的原理(实现过程)
面向对象编程有三大特性:继承、封装和多态。其中,多态又分为编译时多态和运行时多态。编译多态是通过重载函数体现的,运行多态是通过虚函数体现的。多态是如何实现的呢?下面举个例子:结果:在例子中那么为什么会出现多态性,其底层的原理是什么?这里需要引出一些相关的概念来进行解释。父类对象模型:子类对象模型:上图中展示了虚表和虚表指针在基类对象和派生类对象中的模型,下面阐述实现多态的过程:(1)编译器在发现基类中有虚函数时,会自动为每个含有虚函数的类生成一份虚表,该表是一个一维数组,虚表里保存了虚函数的入口原创 2022-06-23 19:04:40 · 511 阅读 · 0 评论 -
C++ 中 typename用法
typename在C++类模板或者函数模板中经常使用的关键字,此时作用和class相同,只是定义模板参数;看到上面这个例子时,我们脑子里可能会有两种想法:这样的话就会产生异议,由上面的介绍可以知道iterator是类T的静态数据成员,静态成员函数或者是嵌套类型;当我们这样写的时候,C++默认就是解释为一个变量的。所以,为了和变量区分,必须使用typename告诉编译器。如果没有修饰关键词typename编译器可能认为我们是想实现乘法运算;若我们的本意是想定义一个指针时,这是就需要typename来修原创 2022-06-20 23:55:53 · 6432 阅读 · 0 评论 -
pointer - like classes && functions - like classes
pointer-like classes , 像指针行为的类,C++里一般操作指针的操作符有 和 ,实质上就是类重载了这两个操作符,使得类的行为看起来像指针。一般这种类中都有一个普通的指针。主要分为两种:智能指针和迭代器。为何设计一个类产生的对象要像一个指针,因为你想要它做比指针更多的事情,所以通常这样做出来的东西,又叫做智能指针。1.T* px; px是指向T类型的指针。2.C++里面的操作符重载是很常见的,且是很重要和强大的。智能指针的这两个写法几乎是固定的。智能指针都会有这么一个构造函数:原创 2022-06-17 17:27:52 · 150 阅读 · 0 评论 -
C++转换函数、non-explicit-one-argument构造函数
本文将参考侯捷老师课程来简单介绍C++中的转换函数(conversion function)。设计一个类Fraction表示分数,包含分子和分母。我们希望它能自动转换为double类型,并参与运算。operator是关键字,它通常和运算符一起使用,表示运算符函数。。double是函数名,表明了将Fraction转换为double类型。(正是由于此处指明了输出类型,所以。编译器会根据函数名决定返回值类型)。const是限制符,表示在该函数内,不会改变数据成员的值。(明确指定const,避免后期维护或重构时,原创 2022-06-01 02:28:42 · 260 阅读 · 0 评论 -
设计clas注意事项:头文件、inline、成员初值列、new、Big Three
设计clas注意事项:头文件、inline、成员初值列、new、Big Three、const用法等等原创 2022-05-06 09:00:00 · 244 阅读 · 0 评论 -
C++ 中 inline 的用法
inline简单介绍原创 2022-05-04 02:48:27 · 300 阅读 · 0 评论 -
FFT原理 & C++实现简单FFT代码
FFT原理C++实现FFT原创 2022-04-11 15:29:46 · 7534 阅读 · 0 评论 -
Effective C++ & More Effective C++(四)
effective c++ 以及 more effective c++总结原创 2022-03-13 07:00:00 · 1162 阅读 · 0 评论 -
C++ malloc、智能指针、类型转换等(三)
malloc、强制转换、智能指针原创 2022-03-12 18:25:18 · 2466 阅读 · 0 评论 -
C++ explicit、using、::、decltype 等(二)
explicit、using、decltype原创 2022-03-11 23:35:53 · 133 阅读 · 0 评论 -
C++中const、static、this指针、inline、volatile、union等(一)
C++基础原创 2022-03-10 20:05:05 · 744 阅读 · 0 评论 -
【STL】配接器(adapters)
概述配接器正如他的名字,在STL中是一个轴承、转换器的角色。Adapter这个概念,实际上是一种设计模式。具体可以参考之前的文章【C/C++ 设计模式】(十四)适配器模式(Adapter)他在STL中,改变接口,赋予新功能,与其他classes进行兼容。主要包括仿函数配接器(function adapter)、容器配接器(container adapter)、迭代器配接器(iterator adapter)。应用于容器STL提供的两个容器queue和stack,两者是一种容器配接器,修饰了deque原创 2021-11-22 16:16:12 · 577 阅读 · 0 评论 -
【STL】仿函数or函数对象
仿函数概况仿函数(functors)是早期的命名,C++标准规格定案后的新名称是函数对象(function objects)。仿函数主要作用于STL所提供的各种算法,从【STL】算法可以看出算法多版本多功能,离不开仿函数的支持。就现在而言,仿函数其实就是一个“行为类似函数”的对象。为了实现这个行为,类别定义中必须自定义(重载)function call 运算子(operator() )。这时候就可以使用下面两种用法:第一种就是产生一个临时对象,然后指定参数,类似下面这种:greater<in原创 2021-11-22 15:39:52 · 649 阅读 · 0 评论 -
【STL】算法(algorithms)
概述算法的泛化过程数值算法基本算法Set相关算法heap算法其他算法原创 2021-11-22 13:30:38 · 643 阅读 · 0 评论 -
【STL】hash_set、hash_map、hash_multiset、hash_multimap的实现
文章目录原创 2021-11-16 20:15:27 · 227 阅读 · 0 评论 -
【STL】set、map、multiset、multimap的实现
文章目录原创 2021-11-15 20:13:40 · 928 阅读 · 0 评论 -
【STL】RB-tree(红黑树)和hashtable(哈希表)的实现原理
概述STL容器,放置物品的东西。所谓STL容器,即是一些常用的数据结构实现出来。容器分为关联式容器和序列容器,而关联容器分为set(集合)和map(映射表)两大类,以及衍生出来的multiset(多键集合)和multimap(多键映射表)。这些容器的底层机制有两种实现方式,红黑树和哈希表。同时,他们也是一种独立容器,但并不对外开放。所谓关联式容器,每个元素都有一个键值(key)和实值(value),插入后,会以某种规定放置在适当位置。同时,关联式容器没有头尾,所以没有push_back、pop_bac原创 2021-11-14 16:37:53 · 2403 阅读 · 1 评论 -
【STL】heap的实现原理(包括priority_queue)
文章目录原创 2021-10-29 18:08:19 · 358 阅读 · 1 评论 -
【STL】stack和queue的实现原理
文章目录原创 2021-10-27 19:07:17 · 882 阅读 · 0 评论 -
【STL】deque的实现原理
文章目录原创 2021-10-26 15:21:12 · 1629 阅读 · 0 评论 -
【STL】list的实现原理(包括slist)
文章目录原创 2021-10-23 16:10:15 · 585 阅读 · 0 评论 -
【STL】vector的实现原理
一、概述vector的数据安排以及操作方式与array极为相似,两者的不同主要在于空间运用的灵活性。array是静态空间,一旦存满,就得分配更大的空间,所有琐碎的操作都得客户自己完成。而vector是动态空间,内部可以自行扩充,容纳新元素。vector的实现技术,关键在于其对大小的控制以及重新分配时的数据移动效率。本章所采用vector版本为 SGI STL 2.91版本。二、vector定义摘要以下是vector部分定义的代码摘录。_Alloc是SGI STL的空间配置器,具体详见【STL】空间原创 2021-10-21 18:22:34 · 730 阅读 · 0 评论 -
【STL】迭代器(iterators)与traits编程
一、概述迭代器(iterator)是一种抽象的设计理念。他是通过提供一种方法,使之能够依次巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式。简言之,通过迭代器可以在不了解容器内部原理的情况下遍历容器。除此之外,STL中迭代器一个最重要的作用就是作为容器(vector,list等)与STL算法的粘结剂,将数据容器和算法分开,只要容器提供迭代器的接口,同一套算法代码可以利用在完全不同的容器中,这是抽象思想的经典应用。容器和算法的泛化可以通过C++的class template 和f原创 2021-10-19 15:44:11 · 256 阅读 · 0 评论 -
【STL】空间配置器||分配器(Allocators)
文章目录原创 2021-10-13 11:18:40 · 403 阅读 · 0 评论 -
C/C++ 面向对象编程,面向对象设计(OOP,OOD)|| class之间的关系
文章目录前言Object BasedClass without pointer member(不带指针)Class with pointer member(带指针)Object Orientedclass之间的关系Composition(复合)Delegation(委托)Inheritance(继承)class之间的关系组合Inheritance (继承) with virtual functions (虚函数)Inheritance(继承)+ Composition(复合)Delegation (委托).原创 2021-10-01 18:53:06 · 481 阅读 · 0 评论 -
【STL】容器的分类与性质总结
1.vector 底层数据结构为数组 ,支持快速随机访问2.list 底层数据结构为双向链表,支持快速增删3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见《STL源码剖析P146》,支持首尾(中间不能)快速增删,也支持随机访问 deque是一个双端队列(double-ended queue),也是在堆中保存内容的.它的保存形式如下: [堆1] --> [堆2] -->[堆3] --> … 每个堆保存好几个元素,然后堆和堆之间有指针指向,看起来像是list和vector的原创 2021-09-21 16:35:45 · 98 阅读 · 0 评论 -
C++11新特性
文章目录nullptr替代 NULL一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结学习内容:学习时间:学习产出:nullptr替代 NULL一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.py.原创 2021-09-18 17:06:13 · 101 阅读 · 0 评论