
C++
HayPinF
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
归并排序,C++
归并排序,C++原创 2023-01-10 23:19:51 · 174 阅读 · 0 评论 -
实例解释C++虚继承、菱形继承
虚继承、菱形继承原创 2022-11-01 18:56:32 · 155 阅读 · 0 评论 -
模板类、模板函数的模板类型显式实例化及其用途(转载)
模板类、模板函数的模板类型也是对应类、函数的“类型参数”,调用模板类、模板函数时将根据传入的“模板类型参数”才能实例化完整的类、完整的函数,不同的“模板类型参数”能实例化出不同的类、函数转载 2022-10-31 18:54:01 · 1382 阅读 · 0 评论 -
基于C的malloc()与free()自定义C++容器的内存分配器allocator
基于C的malloc()与free()自定义C++容器的分配器allocator,以及拷贝构造、拷贝赋值运算符,移动构造、移动赋值运算符转载 2022-10-24 17:18:06 · 285 阅读 · 0 评论 -
《C++Primer》5ed直接初始化与拷贝初始化,标准库容器push与emplace的区别
标准库容器push与emplace的区别原创 2022-10-07 17:48:02 · 310 阅读 · 0 评论 -
C++进程内存结构
参考https://www.cnblogs.com/skullboyer/p/10979704.htmlhttps://www.cnblogs.com/laojie4321/p/4405069.htmlclass T{ public: static int cls_field; int field1 = 3; // 类内初始值,编译时初始化,data T(){ // field1 = 5; }};int T::cls_field原创 2021-07-26 17:37:48 · 221 阅读 · 0 评论 -
cmake构建后处理事件
使用add_custom_command()函数参考官方文档:https://cmake.org/cmake/help/v3.20/command/add_custom_command.html#command:add_custom_command之前使用Visual Studio 2010时记得有在项目配置里写后处理事件的脚本,经常遇到权限问题,那时以为是Visual Studio 2010 特别地执行后处理,但其实cmake的函数非常丰富,自带这些需求。windows平台的软件开发真得不堪回首。原创 2021-06-12 00:13:13 · 3668 阅读 · 3 评论 -
C++编译链接的理解与static修饰全局函数
1、C++编译链接的理解首先,C++链接的逻辑是:对构建目标target,其int main()入口函数所在的文件通过#include "myfunc_class.h"包含函数或类的声明,这些头文件内也可以写有实现从而都不需要.cpp文件,但这样做就违背了“在头文件中只包含声明使头文件内容紧凑清晰”的初衷,所以一般会在对应的"myfunc_class.cpp"文件中写有实现。然后这些“依赖文件”又可以有其他依赖文件,从而形成如下的拓扑依赖关系:main.cpp<——myfunc_clas...原创 2021-06-04 17:41:04 · 470 阅读 · 0 评论 -
在包含了iostream以后,cmath, cstdlib, stdexcept, exception, climits 等头文件都不需要二次包含,iostream已经包含了。
转载C++标准头文件 IOSTRERAM,ISTREAM, CSTDLIB, CMATH等之间的关系如果头文件中需要用到cin,cout,则必须要包含iostream,而在包含了iostream以后,cmath, cstdlib, stdexcept, exception, climits 等头文件都不需要二次包含,iostream已经包含了。...转载 2021-05-02 14:30:48 · 798 阅读 · 0 评论 -
实现单例模式的三种用法:成员方法内静态局部变量、类静态成员、全局变量
今天看到大神是这样使用单例模式的:使用函数静态局部变量而不是类静态成员或全局变量来实现进程所有(拥有)的单例模式,相似,因为都是在编译时在进程内存静态区申请空间template<typename T>class XSingleton{ //使用函数静态局部变量而不是类静态成员或全局变量来实现进程所有的单例模式,相似,因为都是在编译时在进程内存静态区申请空间public: static T& instance(void) { static原创 2021-04-22 10:20:03 · 454 阅读 · 0 评论 -
C++类的operator bool()方法
#include<iostream>#include<string>#include<vector>class SubType{ public: static std::string clsfield; std::pair<bool,std::string> field; SubType(bool b,std::string str):field(std::make_pair(b,str)){}; ...原创 2021-04-13 21:24:00 · 2004 阅读 · 0 评论 -
狗东二面算法笔试:给出了一个整数数组从前到后两两元素的与或结果的数组,求出原始数组,做出一半
假设有一个长度n的整数数组,数组中元素分别是从1到n满布的正整数,元素顺序任意组合。现在给出这个数组的从前到后两两元素进行与或^的结果的一个数组,让求出原始数组。函数签名:vector<int> getOriginArr(vector<int> xor_vec,int n);解:与或是指只当对应位一个是0另一个是1时才得到1,否则得到0;即0^0=0;1^1=0;0^1=1;1^0=1;与或的特性是:1、一个数字A与自身与或的结果为0;2、0与任何数字与或的结果都是那个数字本身,原创 2021-03-17 16:25:01 · 209 阅读 · 0 评论 -
某度算法题:含重复元素数组保持稳定去重
题:给定一个整数数组arr,其中元素可能重复,要求返回去重后的数组,且去重保持稳定,也就是把重复的第二个元素去掉而保留第一个元素。解:利用通排序的思想,第一次遍历输入数组,确定元素大小区间[min,max],然后申请max-min+1的桶数组bukarr,全部初始化成[min,max]区间之外的某个不会出现在输入数组元素区间内的数比如min-1。然后构造输出数组newarr,第二次遍历输入数组,对元素x,其在桶数组内的下标就是x-min,先检查bukarr[x-min]是否已经被标记1,如果没有被标记1原创 2021-03-17 14:40:28 · 182 阅读 · 0 评论 -
递归缩小问题规模直至边界值可知导致所在分支结果可知,状态机穷举,以及递归回溯vs递归传累计结果两种用法
参考"团灭 LeetCode 股票买卖问题"https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247484508&idx=1&sn=42cae6e7c5ccab1f156a83ea65b00b78&chksm=9bd7fa54aca07342d12ae149dac3dfa76dc42bcdd55df2c71e78f92dedbbcbdb36dec56ac13b&scene=21#wechat_redirect原创 2021-03-14 23:26:00 · 227 阅读 · 0 评论 -
一维、二维动态规划,与递推递归缩小问题规模的感悟
动态规划,核心思想就是一个递推公式以及边界值,数学上叫归纳法。一维动态规划典型如斐波那契数列,f[i]=f[i-1]+f[i-2];dp[i]=dp[i-1]+dp[i-2]; 边界值f[1]=1,f[2]=1,即dp[1]=1,dp[2]=1已知。二维动态规划典型如二维整数数组从左上角到右下角,只能向右或向下运动时的最小、最大路径和:dp[i-1][j-1] dp[i-1][j]dp[i][j-1] dp[i][j]最小路径和:dp[i][j]=min(dp[i...转载 2021-03-14 13:40:56 · 650 阅读 · 0 评论 -
n维数组内m长度滑动窗口最大值,转载
https://www.cnblogs.com/haozhengfei/p/a14049ec0869a8125a69f3af37471c77.html重在理解所维持的当前窗口内元素最大值及其右边较小值元素的下标的队列的用处:一个窗口内最大值元素左侧的元素在当前窗口内没用,对下一窗口最大值更没用,没用就是不用考虑。反而,一个窗口内最大值元素右侧的递减的元素,在当前窗口内没用,但下一窗口会"挤掉"其前一窗口最左侧的值,万一前一窗口最左侧的值就是前一窗口内最大值,那也要在维护的当前窗口内最大值元素及其右侧递减转载 2021-03-13 16:08:23 · 256 阅读 · 0 评论 -
浮点数表示的计算方法
转载:https://mp.weixin.qq.com/s/VghDOJCJTN61y_6TqLDc2g0.1(10)转化为二进制:整数部分的二进制就是整数部分除以2得余数压栈,商再除以2得余数压栈,直到商为零压栈最后一个余数,因此整数部分就是0(2);比如整数6的二进制表示就是压栈顺序为0、1、1,倒序弹出所得110(2)就是6的二进制表示。小数部分与此相反,0.1*2=0.2取出整数部分0压栈,小数部分0.2继续0.2*2=0.4取出整数部分0压栈,小数部分0.4继续0.4*2=0.8取出整数部转载 2021-03-13 15:24:55 · 3198 阅读 · 0 评论 -
翻转链表,合并两个有序链表,补充一个翻转链表很清晰的实现
翻转链表、合并两个有序链表#include<iostream>struct Node{ int val; Node *pnext; Node(int arg,Node *pNext=nullptr):val(arg),pnext(pNext){};};Node* TurnList(Node *p){ //翻转链表 if(!p)return nullptr; Node *ppre(p),*pcur(p->pnext),*pnext(n原创 2021-03-12 22:38:35 · 242 阅读 · 0 评论 -
n维数组的m维滑动窗口从左滑到右的每个窗口内最大值
https://www.cnblogs.com/haozhengfei/p/a14049ec0869a8125a69f3af37471c77.html#include<iostream>#include<vector>#include<queue>using namespace std;/*一个整形数组arr和一个大小为w的窗口从数组的最左边滑倒最右边,窗口每次向右滑一个元素。返回一个长度为n-w+1的数组res,res[i]表示每一种窗口状态下的最大转载 2021-03-12 01:09:32 · 404 阅读 · 0 评论 -
狗东无人车一面两个算法题,20200311,动规、二进制
1、左上角到右下角最大路径和。解:动规不解释。2、0到非负整数m之间所有整数,格子的二进制表示中1的个数。解:递推,i:前一个数若最后的二进制位是0,则当前数的二进制1个数是前一个数二进制个数+1;ii:前一个数最后的二进制位是1,则向前找连续的二进制1的个数nCount,当前数的二进制1个数是前一个数二进制个数-nCount+1;#include<iostream>/*1\二维矩阵,*/#include<vector>using namespace st原创 2021-03-11 18:51:56 · 190 阅读 · 0 评论 -
贪心算法 leetcode 452用最少数量的箭引爆气球 自己写的,思路清晰
题:在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引爆,..原创 2021-03-11 15:09:42 · 187 阅读 · 0 评论 -
回溯法 剑指OFFER第12题,矩阵中的路径,自己写的,清晰明白
先看题:a b t gc f c sj d e h题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,上面的3x4的矩阵中包含一条字符串"bfce"的路径(路径中的字母用下划线标出)。但矩阵中不包含字符串"abfb"的路径,因为字符串的第一个字符b占据了矩阵中的第...原创 2021-03-10 11:50:47 · 233 阅读 · 0 评论 -
C++二维数组
int m(3),n(2);int pos7[3]={1,2,3}; //正确,声明时初始化,维数要么全确定(常量),要么最高维空由初始化列表反推,但元素类型(低维)必须确定// int pos6[m]={1,2,3}; //编译错,变量大小的对象不能被初始化,必须是常量大小//error: variable-sized object may not be initializedint pos5[]={1,2}; //正确,一维数组的元素类型确定(int),最高维维数不定,维数由...原创 2021-03-09 22:48:57 · 425 阅读 · 0 评论 -
算法题:无序数组的中位数,C++,概念解释
转载:https://www.cnblogs.com/shizhh/p/5746151.html中位数,就是数组排序后处于数组最中间的那个元素。说来有些麻烦,如果数组长度是奇数,最中间就是位置为(n+1)/2的那个元素。如果是偶数呢,标准的定义是位置为n/2和位置为n/2+1的两个元素的和除以2的结果,有些复杂。为了解答的方便,我们假设数组长度暂且都为奇数吧。1、硬刚排序,最小复杂度nlogn,快排、堆拍、归并排序,然后直接按(n+1)/2取出中位数;2、快排确定中位数,在快排的递归中判断中位数转载 2021-03-06 13:49:17 · 590 阅读 · 0 评论 -
堆排序算法,精简
//堆排序void heapSort(int arr[],int nsize){ if(nsize<=1)return; //arr退化成指向当前子数组(堆)的首元素的指针,nsize是当前子数组的维数 int iM(ceil((nsize-1-2)/2)); //最后一个非叶子节点 while(iM>=0){ if(iM*2+2>(nsize-1)){ //没有右子节点 if(arr[iM]>=arr[i.原创 2021-02-27 23:48:23 · 135 阅读 · 0 评论 -
C++函数重载中形参的const属性,《C++ Primer》
《C++ Primer》(第五版)P208一个拥有顶层const(const修饰变量自身)的形参无法和另一个没有顶层const的形参区分开来:Record lookup(Phone);Record lookup(const Phone); //编译错,重复声明了Record lookup(Phone)变量或常量的实参都可以值拷贝给变量或常量的形参,因此无法判断调用上面哪个函数,C++干脆禁止形参列表只分是否是顶层const的重载。顶层const的指针也是如此:Record loo原创 2021-02-27 21:21:18 · 273 阅读 · 0 评论 -
C++ extern声明外部文件所定义的变量,与cmake的CMakeLists.txt中set(SOURCE ...)的关系
demo工程的目录结构:HaypinsMBP:trainCmake haypin$ tree ..├── C2.cpp├── C2.h├── CMakeLists.txt├── Strclass.cpp├── Strclass.h├── build│ └── build.sh├── main.cpp└── temp.cpp1 directory, 8 filesC2.h:#pragma once#include<string>class C2{原创 2021-02-24 15:26:41 · 1228 阅读 · 0 评论 -
std::string类实例保存有指向堆的指针,堆中实际存储字符串
偶然发现一个情况:std::cout<<sizeof(std::string)<<"\n"; //24struct Person{ std::string name; //24 int age; //8 std::string arr[2]; //48};std::cout<<sizeof(Person)<<"\n"; //80std::string mystr("白日依山尽,黄河入海流。欲穷千里转载 2021-02-19 18:13:17 · 470 阅读 · 0 评论 -
温习一下快排和归并排序,假装在面试手撕,再加一个使用标准库std::partition函数实现二分原位重排的快排
每次写出来都不一样,说明我不是人不是机器。#include<iostream>#include<vector>void FastSort(std::vector<int> &arr,int is,int ie){ if(is>=ie)return; int i(is),j(ie); int val(arr[i]); while(i<j){ while(i<j && arr[原创 2021-02-02 10:05:57 · 1150 阅读 · 0 评论 -
std::condition_variable::notify_one()伪唤醒的一个例子
//https://en.cppreference.com/w/cpp/thread/condition_variable//https://www.runoob.com/cplusplus/cpp-date-time.html#include<iostream>#include<string>#include<thread>#include<mutex>#include<condition_variable>#include<.原创 2021-02-01 20:58:13 · 558 阅读 · 0 评论 -
C++线程相关的支持超时std::chrono::duration的函数总结
翻译自:《C Concurrency In Action 2 Ed》形如std::this_thread::sleep_for(std::chrono::duration)与std::this_thread::sleep_until(std::chrono::time_point)的线程休眠只是超时处理的一种形式,超时可以配合条件变量std::condition_variable和期望值std::future一起使用。超时甚至可以在尝试获取互斥锁(当互斥量支持超时时)使用。std::mutex和std:翻译 2021-02-01 00:12:53 · 2907 阅读 · 0 评论 -
std::future期望值的三处用法,以及向std::promise承诺值传入异常的用法
一、std::future期望值的三处用法:1、期望值std::future<T>与承诺值std::promise<T>搭配使用,执行"std::future<T> fu=pro.get_future();"绑定承诺值与期望值,承诺值pro.set_value()或pro.set_exception()传值后,由期望值fu.get()提取,或fu.wait()阻塞消费者线程直到期望值就绪;2、期望值std::future<T>与打包任务std::pac原创 2021-01-30 18:06:08 · 610 阅读 · 0 评论 -
VS2010 C++标准库正则表达式捕获组不能超过31个,否则产生异常
参考微软C++标准库中正则表达式的介绍:https://docs.microsoft.com/zh-cn/cpp/standard-library/regular-expressions-cpp?view=msvc-160其中捕获组Capture Group的最后一句话:In this implementation, the maximum number of capture groups is 31。就是说在当前(Visual Studio 2019)的C++标准库实现中正则表达式的捕获组数量不能超过翻译 2021-01-26 17:12:44 · 461 阅读 · 0 评论 -
C++线程安全的栈stack与队列queue类及其注意事项,摘自《C Concurrency In Action2》
1、线程安全队列类threadsafe_queue#include <queue> #include <memory> #include <mutex> #include <condition_variable> template<typename T> class threadsafe_queue { private: mutable std::mutex mut; // 1 互斥量必须是可变的 st翻译 2021-01-25 00:27:39 · 687 阅读 · 2 评论 -
C++抛出异常后仍能调用作用域上文局部变量的析构方法
先贴现象:#include <iostream>#include <string>using namespace std;class MyExcept{public: explicit MyExcept(string err) : errmsg(err) {} string getErrMsg() { return errmsg; }private: string errmsg;};class Demo{public: string field翻译 2021-01-18 18:07:48 · 689 阅读 · 0 评论 -
mac VScode C++控制台项目cmake编译配置
参考:https://blog.youkuaiyun.com/qq_35976351/article/details/91369797?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control转载 2021-01-06 22:32:12 · 795 阅读 · 0 评论 -
单纯实现\*正则表达式的小算法
参考自《labuladong公众号》,实现"a*b"匹配"aaaab"的正则表达式小算法:#include <iostream>#include <string>using namespace std;//20201210:实现"a*b"匹配"aaaaab"但不匹配"aa"的正则表达式,用递归bool IsMatch(string instr,string pattern,string lastcha){ string chxing("*"); if(原创 2020-12-10 20:56:54 · 387 阅读 · 0 评论 -
C++模板语法类似于Python、JavaScript等动态类型语言
C++定义的class T模板类型就是泛类型,模板类型会在被"具象化"之后变成确定类型,所以模板就是对类型的重载,类似于函数对形参类型和形参数量的重载。使用了模板的语句可以对模板类型的实例(T obj=T();obj.method(obj.attr);)或者模板类型的静态方法(T::StaticMethod();)调用"开发者确认具有的属性与方法",编译不会对模板方法进行名字查找,因为是模板类型,没有被"具象化",何谈名字查找,所以模板类型的实例的任何属性名、方法名都可以随意。但一旦使用了("具象"了)模板原创 2020-11-25 11:07:45 · 394 阅读 · 0 评论 -
计算二叉搜索树的累加树,自定义“右子节点——根节点——左子节点“的遍历顺序
力扣538题,BST转化累加树但代码是没看答案自己写的:#include<iostream>class TreeNode{public: int val; int nCount; TreeNode *pl; TreeNode *pr; TreeNode(int val,TreeNode *pl,TreeNode *pr){ this->val=val; this->nCount=0;原创 2020-11-01 12:15:11 · 229 阅读 · 0 评论 -
MFC的Cobject基类及其派生类获取运行时类信息
MFC的CObject基类定义有public的virtual CRuntimeClass *GetRuntimeClass() const;是用来返回多态运行时类信息的虚方法,将运行时类信息封装进了结构体CRuntimeClass中原创 2020-10-30 11:52:16 · 1202 阅读 · 2 评论