- 博客(50)
- 收藏
- 关注
原创 C++函数签名
成员函数前面加const算是重载,类的成员函数隐含会传递this指针;而const成员函数则传递const this指针。调用哪一个取决于类的对象是否是const的。默认参数的值不影响签名,但影响函数调用时的行为。自由函数属于全局或某个命名空间。(右值引用限定)是不同签名。(C++17 后弃用,改用。无法共存(编译器报错)。参数的类型、顺序和数量。成员函数属于特定类(如。
2025-04-10 19:43:48
120
原创 CPU指令的乱序执行和内存序
单线程的情况下,2个指令乱了顺序执行没有关系,反正最终的结果是一样的,但是在多线程的情况下,非常有可能出现你不想看到的情形。Consume(消费):类似Acquire,但作用仅限当前线程(现代编译器中少用,不做介绍了)。Acquire(获取):保证加载后续的读写操作不被重排到此加载操作前,适用于读取共享数据。的读写是没有数据依赖的,遇上在单线程中不会出问题的指令重排,在多线程中就出现了问题:在。在代码退出的时候调用,先负责把一些还没有发送出去的事件都发送了,再设置。负责消费一些事件,在监听到。
2024-12-05 12:33:53
340
原创 STL容器的分类
顺序容器(Sequence Containers):容器适配器(Container Adaptors):关联容器(Associative Containers):无序容器(Unordered Containers):
2024-10-13 19:26:34
290
原创 vector中push_back和emplace_back的区别
在引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)的时候,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放入容器中。原来的临时变量释放。这样造成的问题是临时变量申请的资源就浪费。在容器尾部添加一个元素,这个元素原地构造,不需要触发拷贝构造和转移构造。而且调用形式更加简洁,直接根据参数初始化临时对象的成员。引入了右值引用,转移构造函数(请看这里)后,push_back()右值时就会调用构造函数和转移构造函数。
2024-09-30 16:22:45
333
原创 Foo a30 = Foo(123);会调用哪些构造函数
然后在28行,obj对象又被temp_obj对象进行拷贝初始化[尽管这里是用等于号,但这里不用赋值拷贝构造函数的,因为obj是定义的同时初始化的],又调用了一次拷贝构造函数。如果您的编译器支持C++17或更高版本,并且您启用了相应的优化,那么上述行为是确定的。从C++发展历史看来,c++ 17引入了一个规则,要求在满足一定的条件下避免对象的复制,这在以前是可选的。2. 右值拷贝优化,当某一个类类型的临时对象被拷贝赋予同一类型的另一个对象时,通过直接利用该临时对象的方法来避免拷贝操作。参数的构造函数一次。
2024-09-29 16:56:11
930
原创 C++中move的使用
移动语义允许资源(如动态分配的内存、文件句柄、网络连接等)从一个对象“移动”到另一个对象,而不是进行传统的复制。这样做可以显著提高性能,因为它避免了不必要的资源复制和分配。是标准库中的一个函数模板,它用于将其参数转换为右值引用,从而允许使用移动构造函数或移动赋值操作符(如果可用)来“窃取”资源。它只是将对象的状态标记为可移动,实际的移动操作是在移动构造函数或移动赋值操作符中完成的。后通常不再使用原对象,除非该对象有明确的后续使用场景(例如,在移动赋值操作符内部重新初始化)。)的状态是未定义的,因此在使用。
2024-09-20 14:30:01
300
原创 动态链接(Dynamic Linking)
动态链接是指在程序运行时,由操作系统的装载程序(如Windows的Loader或Linux的ld.so)将程序的各个模块(如动态链接库DLL或共享库so文件)加载到内存中,并解析它们之间的引用关系。这个过程是在程序开始执行或需要调用某个库函数时进行的,与静态链接在编译时完成链接不同。
2024-09-18 16:44:16
460
原创 构造函数与析构函数的执行顺序
当一个类包含另一个类的对象作为成员时,这些成员对象的构造函数会在包含它们的对象的构造函数之前被调用,而它们的析构函数则会在包含它们的对象的析构函数之后被调用。成员对象的构造函数和析构函数的调用顺序与它们在类定义中出现的顺序相同。结果:构造的时候搞base地基在建立房子,先抽象在具体,析构的时候反过来。结果:构造的时候先搬床再封门,析构的时候先拆门在搬床。
2024-09-14 19:02:02
396
原创 C++特性
回调函数就是一个被作为参数传递的函数。在C语言中,回调函数只能使用函数指针实现,在C++、Python、ECMAScript等更现代的编程语言中还可以使用仿函数或匿名函数。回调函数的使用可以大大提升编程的效率,这使得它在现代编程中被非常多地使用。同时,有一些需求必须要使用回调函数来实现。非常知名的回调函数调用有C/C++标准库stdlib.h/cstdlib中的快速排序函数qsort和二分查找函数bsearch中都会要求的一个与strcmp类似的参数,用于设置数据的比较方法。反射机制仿函数/函数对象。
2023-11-20 15:30:04
143
原创 typename、typedef、using对比
在c++的标准库中,因为类继承关系比较复杂和模板使用比较多的原因,源代码中充斥着typename、typedef和using这三个关键字。
2023-10-09 16:46:24
1259
原创 智能指针梳理
RAII()资源获取即初始化。它是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。至此我们可以看到实际上就是把一份资源的责任托管给了一个对象。这种做法有两大好处:不需要显式释放资源。析构时自动调用。采用这种方式,对象所需的资源在其生命期内始终保持有效。RAII。
2023-10-09 12:50:11
128
原创 仿函数介绍
在我们写代码时有时会发现有些功能的实现的代码,会不断的在不同的成员函数中用到,但是又不好将这些代码独立出来成为一个类的一个成员函数。但是又很想复用这些代码。这时就可以用仿函数了,写一个简单类,实现一个operator(),在类实例化时,就将要用的,非参数的元素传入类中。仿函数(functor),就是使一个类的使用看上去象一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。
2023-10-08 17:25:48
67
原创 类继承关系梳理
A: 基类有很多重载函数,而派生类重写了基类的函数,那么默认情况下,基类中的这些所有的重载函数都不可以使用了。参考hello函数如果我们希望只覆盖基类中的一部分函数,而其他函数在派生类中还没有被覆盖,一种使用方法就是使用using声明。这样的话就无须覆盖基类中的每一个重载版本了using声明只需要给出名称,而不需要给出参数列表,因此基类中的所有重载函数在派生类中都可以使用了。
2023-09-28 16:39:08
94
原创 构造函数中,成员变量一定要通过初始化列表来初始化的几种情况
1、类成员为const类型2、类成员为引用类型究其因const对象或引用只能初始化但是不能赋值。构造函数的函数体内只能赋值而不是初始化,因此初始化const对象或引用的唯一机会是构造函数函数体之前的初始化列表中。从无到有叫初始化,初始化(调用拷贝构造函数)创建了新对象;赋值(调用赋值操作符)没有创建新对象,而是对已有的对象赋值。 3、类成员为没有默认构造函数的类类型4、如果类存在继承关系,派生类必...
2018-06-15 21:00:31
1921
转载 降维方法
A.主成分分析PCAB.线性判别分析LDAC.深度学习SparseAutoEncoderD.矩阵奇异值分解SVDE.最小二乘法LeastSquares正确答案:ABCD解析:降维的3种常见方法ABD,都是线性的。深度学习是降维的方法这个就比较新鲜了,事实上,细细想来,也是降维的一种方法,因为如果隐藏层中的神经元数目要小于输入层,那就达到了降维,但如果隐藏层中的神经元如果多余输入层,那就不是降维了。...
2018-06-13 22:19:24
546
转载 需要用到先验概率的算法
在统计模式识分类问题中,当先验概率未知时,可以使用()机器学习 ML基础 易A.最小损失准则B.N-P判决C.最小最大损失准则D.最小误判概率准则正确答案:BC@刘炫320,本题题目及解析来源:http://blog.youkuaiyun.com/column/details/16442.html选项 A 最小损失准则中需要用到先验概率选项B 在贝叶斯决策中,对于先验概率p(y),分为已知和未知两种情况。 1...
2018-06-13 22:15:01
1105
转载 线性分类器分类准则
以下()属于线性分类器最佳准则?机器学习 ML模型 易A.感知准则函数B.贝叶斯分类C.支持向量机D.Fisher准则正确答案:ACD@刘炫320,本题题目及解析来源:http://blog.youkuaiyun.com/column/details/16442.html线性分类器有三大类:感知器准则函数、SVM、Fisher准则,而贝叶斯分类器不是线性分类器。感知准则函数 :准则函数以使错分类样本到分界面...
2018-06-13 16:33:25
1942
转载 为什么引入非线性激励函数
BAT机器学习面试1000题系列(第1~305题) - 优快云博客 https://blog.youkuaiyun.com/v_july_v/article/details/78121924为什么引入非线性激励函数?深度学习 DL基础 中@张雨石:第一,对于神经网络来说,网络的每一层相当于f(wx+b)=f(w'x),对于线性函数,其实相当于f(x)=x,那么在线性激活函数下,每一层相当于用一个矩阵去乘以...
2018-06-13 11:26:59
2850
原创 内存对齐
C++内存对齐总结 - Chandler Qian - 博客园 https://www.cnblogs.com/zrtqsk/p/4371773.html规则1、第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。2、在数据成员完成各自对齐之后,类(结构或联合)本身也要进行对齐,对齐将按照#pragma...
2018-06-13 09:24:09
126
转载 深度学习问题
深度学习岗位面试问题整理笔记 https://zhuanlan.zhihu.com/p/25005808CNN最成功的应用是在CV,那为什么NLP和Speech的很多问题也可以用CNN解出来?为什么AlphaGo里也用了CNN?这几个不相关的问题的相似性在哪里?CNN通过什么手段抓住了这个共性?以上几个不相关问题的相关性在于,都存在局部与整体的关系,由低层次的特征经过组合,组成高层次的特征,并且...
2018-06-12 20:29:44
1048
原创 参数估计
构造点估计常用的方法是: ①矩估计法。用样本矩估计总体矩,如用样本均值估计总体均值。 ②最大似然估计法。于1912年由英国统计学家R.A.费希尔提出,用来求一个样本集的相关概率密度函数的参数。(在以后的文章中专门讨论) ③最小二乘法。主要用于线性统计模型中的参数估计问题。 ④贝叶斯估计法。基于贝叶斯学派(见贝叶斯统计)的观点而提出的估计法。...
2018-06-12 10:35:07
230
转载 最小二乘法与梯度下降法的区别
最小二乘法与梯度下降法的区别? - 优快云博客 https://blog.youkuaiyun.com/qq_27514297/article/details/53508149狭义的最小二乘法:指的是在线性回归下采用最小二乘准则(或者说叫做最小平方),进行线性拟合参数求解的、矩阵形式的公式方法。所以,这里的(最小二乘法)应叫做(最小二乘算法)或者(最小二乘方法,百度百科【最小二乘法】词条中对应的英文为(T...
2018-06-11 21:33:57
16451
转载 特征工程
使用sklearn做单机特征工程 - jasonfreak - 博客园 http://www.cnblogs.com/jasonfreak/p/5448385.html数据预处理 2.1 无量纲化 2.1.1 标准化 2.1.2 区间缩放法 2.1.3 标准化与归一化的区别 2.2 对定量特征二值化 2.3 对定性特征哑编码 2.4 缺失值计算 2.5 数据变换3 特...
2018-06-11 16:57:17
215
转载 malloc/free与new/delete的区别
百度笔试题:malloc/free与new/delete的区别 - 优快云博客 https://blog.youkuaiyun.com/hackbuteer1/article/details/67891641、本质区别malloc/free是C/C++语言的标准库函数,new/delete是C++的运算符。对于用户自定义的对象而言,用maloc/free无法满足动态管理对象的要求。对象在创建的同时要自动执...
2018-06-07 22:34:53
182
转载 参数模型与非参数模型
LR是参数模型,SVM是非参数模型。参数模型、非参数模型(以及半参数模型)的概念应该源自于统计学中。统计专业中有一门课程叫做《非参数统计》,研究的对象就是秩检验、核密度估计等。在统计学中,参数模型通常假设总体(随机变量)服从某一个分布,该分布由一些参数确定(比如正太分布由均值和方差确定),在此基础上构建的模型称为参数模型;非参数模型对于总体的分布不做任何假设,只是知道总体是一个随机变量,其分布是存...
2018-06-01 22:59:44
33206
11
转载 overfitting
正则化(Regularization)L2正则化:目标函数中增加所有权重w参数的平方之和, 逼迫所有w尽可能趋向零但不为零. 因为过拟合的时候, 拟合函数需要顾忌每一个点, 最终形成的拟合函数波动很大, 在某些很小的区间里, 函数值的变化很剧烈, 也就是某些w非常大. 为此, L2正则化的加入就惩罚了权重变大的趋势.L1正则化:目标函数中增加所有权重w参数的绝对值之和, 逼迫更多w为零(也就是变稀...
2018-06-01 11:18:33
169
转载 估计误差和近似误差
如何理解和区分近似误差和估计误差? - 知乎 https://www.zhihu.com/question/60793482机器学习—近似误差与估计误差理解 - 优快云博客 https://blog.youkuaiyun.com/weixin_37895339/article/details/78794190近似误差:可以理解为对现有训练集的训练误差。 估计误差:可以理解为对测试集的测试误差。近似误差关...
2018-05-28 16:15:08
1263
原创 欧氏距离缺点及改进及马氏距离
欧氏距离,最常见的两点之间或多点之间的距离表示法,又称之为欧几里得度量,它定义于欧几里得空间中,如点 x = (x1,...,xn) 和 y = (y1,...,yn) 之间的距离为:欧氏距离虽然很有用,但也有明显的缺点。它将样品的不同属性(即各指标或各变量量纲)之间的差别等同看待,这一点有时不能满足实际要求。例如,在教育研究中,经常遇到对人的分析和判别,个体的不同属性对于区分个体有着不同的重要性...
2018-05-28 15:50:05
25117
2
转载 机器学习算法步骤
机器学习算法一般是这样一个步骤:1)对于一个问题,我们用数学语言来描述它,然后建立一个模型,例如回归模型或者分类模型等来描述这个问题;2)通过最大似然、最大后验概率或者最小化分类误差等等建立模型的代价函数,也就是一个最优化问题。找到最优化问题的解,也就是能拟合我们的数据的最好的模型参数;3)然后我们需要求解这个代价函数,找到最优解。这求解也就分很多种情况了: a)如果这个优化函数存在解析...
2018-05-26 22:48:03
1698
转载 C++ 对象的内存布局
多重继承时,以声明顺序在内存中存储A/B的空间(即虚表+数据),再存储C的数据;C中重新实现的虚函数会在A/B的虚表中取代原有的虚表项,C中新加的寻函数会加在A中虚表的最后。C++ 对象的内存布局(上) - 优快云博客 https://blog.youkuaiyun.com/haoel/article/details/3081328...
2018-05-23 16:07:18
496
转载 String与数组
求长度C/C++ strlen(str)和str.length()和str.size()都可以求字符串长度。其中str.length()和str.size()是用于求string类对象的成员函数不包括‘/0’strlen(str)是用于求字符数组的长度,其参数是char*。不包括'\0'C++中字符数组与string的相互转换 - Boblim - 博客园 https://www.cnblogs...
2018-05-21 16:57:56
1800
转载 C++ STL中容器的使用总结
setset<string>result;result.insert(str);result.erase(iter)//iter为集合迭代器for(set<string>::iterator it=result.begin();it!=result.end();it++) { res.push_back(*it);/...
2018-05-06 22:19:01
456
转载 堆和栈的区别
一、堆栈空间分配区别:1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。二、堆栈缓存方式区别:1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收...
2018-04-29 22:33:00
195
转载 Jupyter notebook教程
https://blog.youkuaiyun.com/red_stone1/article/details/72858962Jupyter notebook(又称IPython notebook)是一个交互式的笔记本,支持运行超过40种编程语言。成为人们创造优美的可交互式文档和教育资源的一个强大工具。在使用这个notebook之前,你需要先进行安装。你可以在Jupyter website上找到完整的安装步骤...
2018-04-11 15:34:46
341
转载 C++内存管理
https://blog.youkuaiyun.com/xiongchao99/article/details/74524807(写的不太一样)转自C/C++内存管理详解 http://chenqx.github.io/2014/09/25/Cpp-Memory-Management/ 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈:在执行函数时,函数内局部变量...
2018-04-10 17:11:49
119
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人