![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 61
qq_43812167
这个作者很懒,什么都没留下…
展开
-
decltype,initializer_list,variadic templates学习记录(c++)
decltype,initializer_list,variadic templatesdecltypelnitializer_listVariadic Templatesdecltypedecltype的作用就是的到一个表达式或者变量的类型#include <iostream>using namespace std;int getSize(){ cout << "call getSize()" << endl;}int main(){原创 2021-02-16 17:11:50 · 132 阅读 · 1 评论 -
sizeof()数组名的问题
void func(int array[]){ cout << sizeof(array) << endl;}int main(){ int array[] = { 3, 4, 5 }; func(array); cout << sizeof(array) << endl; cout << sizeof(&array) << endl; char str[] = "1234567"; const char*原创 2021-02-09 18:24:59 · 120 阅读 · 0 评论 -
右值引用,移动构造,移动赋值的探究(c++)
右值引用,移动构造,移动赋值这里就不说概念了,只是对用法的探究。#include <functional>#include <iostream>#include <string.h>#include <string>using namespace std;class MyPair{public: MyPair() { a = 'a'; b = new int(0); cout原创 2021-02-08 22:02:06 · 89 阅读 · 0 评论 -
new和malloc的区别
面试准备之new和malloc的区别0.属性new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持。1.参数使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。2.返回类型new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。而malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指原创 2021-02-07 18:59:16 · 66 阅读 · 0 评论 -
模板的泛化,全特化,偏特化
模板的泛化,全特化,偏特化模板这里我就不详讲了。可以参考博客:https://blog.csdn.net/tonglin12138/article/details/88595747首先看泛化/** * @brief 类型转换模板类(F 源类型, T 目标类型) */template<class F, class T>class LexicalCast{public: T operator()(const F& v) { return bo原创 2021-02-05 22:25:29 · 234 阅读 · 0 评论 -
lambda表达式和functional以及bind
lambda表达式和functional以及bind简单使用lambda表达式值捕获和引用捕获mutablefunctionalstd::bind简单使用#include <functional>#include <iostream>using namespace std;int main(){ int a = 3; auto func = [a](int b) -> int{ return a+b; }; int b = 4;原创 2021-02-05 21:54:54 · 297 阅读 · 0 评论 -
set和map(c++)
set和map学习记录setmapsetset和multiset是以红黑树为底层结构的,因此有自动排序的特性。排序的依据是key,而set和multiset元素的value和key合一:value就是key小提示:set和multiset的区别就是set里面的元素必须不同,而multiset的元素可以相同。set和multiset提供遍历操作及iterator,按正常的规则(++it),便能获得排序状态。#include <iostream>#include <set>原创 2021-02-05 19:22:23 · 105 阅读 · 0 评论 -
hashtable(c++)
hashtable学习记录哈希表简单来说就是一个整数取余,余数为几就把这个元素按放在第几个位置,然而这个位置有元素呢?所以就用链表来把同一个位置的元素串起来。所以就形成了上面的结构。上面有一个buckets vector,就是要和哪个数取余,这个有多大呢?开始为53,然后约定如果hashtable中存的元素大于bucket vector的容量就扩容,那么扩容到多大呢?就扩容到与原来两倍最接近的一个质数,就是图片右上角的那些数。上面是hashtable的源码,模板参数有点多,我也没太记住,后面有需要原创 2021-02-05 19:15:47 · 152 阅读 · 0 评论 -
智能指针
智能指针学习记录auto_ptrunique_ptrshared_ptr智能指针能够保证我们像使用指针一样使用智能指针但是能够避免内存泄漏,智能指针有四种,我们一 一来看。auto_ptr#include<iostream>#include<memory>using namespace std;class Test{public: Test(string s) { str = s; cout<<"Test cr原创 2021-02-01 17:59:50 · 70 阅读 · 0 评论 -
C/C++-左值、右值及引用
https://www.cnblogs.com/Bylight/p/10530274.html原创 2021-02-01 16:42:18 · 57 阅读 · 0 评论 -
list学习记录(c++)
list学习记录数据结构数据结构从上面的图示可以看出list实际上是一个双向的循环链表,list里面有一个__list_node类型的指针,__list_node又有三根指针。分别是begin,end,和data熟悉双向循环链表的应该很清楚各自的作用了,这里就不多讲了。就是后面有一个灰色的node,是双向循环链表的最后一个元素的下一个元素...原创 2021-02-01 15:37:39 · 79 阅读 · 0 评论 -
vector学习记录
vector学习记录首先如上图所示左边是vector的内存布局,右边是源代码,vector中的protect成员中有三根指针start,finish,end_of_storage,分别指向vector的第一个元素的首地址,最后一个元素的下一个元素的首地址,以及vector边界尾部的地址,然后下面是vector中一些公有函数,都比较简单,下面主要介绍vector是如何扩容的,vector要扩容肯定是插入元素时容量不够,这里插入有两种方法,分别是insert和push_back上面是push_back的原创 2021-01-31 15:23:26 · 94 阅读 · 0 评论 -
deque(c++)学习记录
deque学习记录首先介绍下deque,deque是一个双向的队列,也就是既可以从队列的前面入队,也可以从队列的后面入队,同样可以从队列的前面出队,也可以从队列的后面出队。用图表示就是但是的deque的中数据的存储方式却不是顺序存储或者双向链表一样的离散存储而是下面的结构:先别急,首先最中间的map和mapsize,图片上的是map并不是指这个结构是键值对的map,而是一种映射关系,因为里面都是指针,指出去了,指向了在堆上的buffer,二buffer里面才是真正元素存放的地方,这个map里面的指原创 2021-01-30 16:35:58 · 118 阅读 · 0 评论 -
模板类的成员函数的实现要放在.h文件中
来记录一下教训吧!模板类的成员函数的实现一定要放在.h文件中要不然gcc编译的时候会报以下错误:血一样的教训,搞得我怀疑人生了原创 2021-01-28 20:54:45 · 287 阅读 · 0 评论 -
c++中的虚指针和虚表
c++中的虚指针和虚表这篇文章是学习了侯捷老师的课后所做的记录,先向大师致敬。这是侯捷老师上课所用的ppt,右边类A,B,C三个类的继承关系,继承关系包含两层意思,一层是父类和子类的内存模型,从ppt的左边可以看的很清楚,第一个成员是一个地址,也就是虚指针,当一个类中有虚函数的时候,对象中就会有一个虚指针,子类会拥有父子的成员变量,另一层就是函数,继承关系继承的函数的调用权。ppt中间是虚函数表,每一个类中都有一个虚函数表,里面存的都是虚函数的地址,当对象要调用虚函数是就会去查虚函数表,通过虚函数表里原创 2021-01-24 21:17:02 · 410 阅读 · 0 评论 -
关于c++多线程互斥的一些操作
关于c++多线程互斥的一些操作首先介绍一下与线程有关的函数,这里先介绍自己最浅的认识,随着后面使用的增多,再慢慢补充。pthread_create: 在本进程中创建一个线程pthread_t类型的指针,第二个参数是线程的属性,第三个参数是该线程运行的函数,第四个参数是运行该函数所需的参数。作用:创建一个线程。pthread_join:第一个参数为pthread_t类型的指针,第二个参数为一个自己定义的指针,它可以用来存储被等待线程的返回值。作用:调用的线程等待被调用的线程执行结束后再执行,相当于阻原创 2021-01-21 16:19:50 · 492 阅读 · 1 评论 -
c++如何使用yaml来进行配置
c++如何使用yaml来进行配置yaml的基本语法可以参考这个博客:https://www.cnblogs.com/sddai/p/9626392.htmlyaml的使用也可以参考这个博客:https://www.it610.com/article/1304246269576777728.htm我目前学习到是使用yaml来对对象进行初始化,后面有yaml的其他用法在进行补充,先演示一下yaml的基本用法config.yaml的内容:languages: - Ruby - Perl - Pyt原创 2021-01-20 11:52:59 · 722 阅读 · 0 评论 -
c++结构体内存布局探索记录
c++结构体存储详解结论:测试一:功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入结论:这是我第一次写博客,技术有限,如果有错误,希望大家积极指正。结论:如果结构体内的基本数据类型所占的字节数全都小于所设定的对齐字节数,则该结原创 2021-01-18 19:59:50 · 242 阅读 · 0 评论