- 博客(30)
- 收藏
- 关注
原创 局部static变量
不通的模板类型会创建不同的函数,所以即使同为一个函数(其实编译器会根据不同的类型生成不同的函数)函数内的静态局部变量会根据类型的不同分别初始化。(4)它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。(2)静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;(3)静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为 0;(1)该变量在全局数据区分配内存;
2022-09-01 18:53:46 312
原创 蓄水池抽样算法
有一个在大数据下很现实的例子:“给出一个数据流,这个数据流的长度很大或者未知。并且对该数据流中数据只能访问一次。请写出一个随机选择算法,使得数据流中所有数据被选中的概率相等。”解决这个问题既需要算法设计,又需要一些概率论知识,因此对于大多数人,起码包括我,这不是一个立刻就能想出答案的问题。解决这个问题的算法叫蓄水池采样(Reservoir Sampling)算法。本篇博客介绍该算法的原理、证明和代码实现。
2022-09-01 18:53:09 200
转载 git 项目过大clone报错问题处理
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-juZtxnHv-1662029450544)(/upload/2022/01/image-d8d3fca848c7485f8b08e8f716b4487d.png)]链接:https://www.jianshu.com/p/1031dd2a6c3a。商业转载请联系作者获得授权,非商业转载请注明出处。解决方法很简单,在git clone时加上–depth=1即可解决。作者:SuperBinlin。
2022-09-01 18:52:30 3160
原创 C printf可变参数的实现原理
所以参数的地址从左到右依次增大),从右到左依次初始化,所以,函数的参数位置是确定的,一旦我们知道了某一个参数的地址我们就可以获得所有参数的地址。由于函数参数是存放在栈中的,printf函数有__cdecl声明,所以是是从右到左依次入栈(栈地址是由高地址向低地址生长的。
2022-09-01 18:50:27 193
原创 std::tie 创建左值引用的 tuple,或将 tuple 解包为独立对象
但里面什么也没有做,直接将传进来的值抛弃。利用了赋值操作运算符和模板,可以抛弃任意类型的值。: 创建左值引用的 tuple,或将 tuple 解包为独立对象。可以对std::tuple以及std::pair进行解包。含左值引用的 std::tuple 对象。
2022-09-01 18:49:20 179
原创 C++14中引入std::shared_mutex
std::shared_mutex用于管理可转移和共享所有权的互斥对象,适用场景比较特殊:一个或多个读线程同时读取共享资源,且只有一个写线程来修改这个资源,这种情况下才能从shared_mutex获取性能优势。C++14中引入std::shared_mutex。
2022-09-01 18:47:59 437
原创 windows terminal 设置随机图背景
windows terminal设置指定的背景图片可能很多人不知道windows terminal 是支持随机图api的。步骤:12在这儿输入随机图api的链接地址就可以随机图api整理,地址
2021-09-07 16:01:36 212
原创 STL中std::set、std::map的lower_bound和upper_bound
STL中std::set、std::map的lower_bound和upper_boundstd::set::lower_bound 返回给定值在set中第一个大于等于该值的迭代器std::set::upper_bound 返回给定值在set中第一个大于该值的迭代器第一次见介绍这两个函数看的 很迷惑,都返回了包含大于关键字的迭代器,跟我们理解的low与up相对的概念不太相同。之后又发现了一篇文章,专门说明这么设计的原因。感觉有必要记录一下,免得以后又忘记了。std::set::upper_bound
2021-04-17 17:42:00 813
原创 基于openssl的aes_ecb加解密
基于openssl的aes_ecb加密aes基于openssl的aes_ecb加密基于openssl的aes_ecb解密aesAES五种加密模式(CBC、ECB、CTR、OCF、CFBecb是aes加密的多种模式中的一种, 这种模式是将整个明文分成若干段相同的小段,然后对每一小段进行加密。基于openssl的aes_ecb加密int32_t Encrypt(const string& content, string& strOut){ int len = content.le
2020-12-01 17:18:09 931
原创 基于openssl的base64编解码
基于openssl的base64编解码base64原理基于openssl的base64编码基于openssl的base64解码base64原理base64是一种编码,并不是一种加密方式。一串base64编码的数据被任何人得到都可以进行解码。base64编码原理建议参考:base64编码原理基于openssl的base64编码size_t BcBase64Encode(const void* data, int data_len, string& res){ BIO* b64 =
2020-12-01 16:29:38 215
原创 C++遍历windows进程及获取进程的各种信息
C++遍历windows进程及获取进程的各种信息遍历进程遍历进程struct ProcessInfo{ wstring szProcessName; wstring szcmdline; DWORD processId; DWORD numOfthread; int64_t cpuInfo; uint64_t memoryInfo; uint64_t IDiskBytes; uint64_t ODiskBytes; uint64_t INetReceiveBytes; uint64
2020-11-15 17:00:25 6531 1
原创 C++windows 进程提权
windows进程提权使用到的系统函数代码使用到的系统函数OpenProcessToken, LookupPrivilegeValueW,AdjustTokenPrivilegesBOOLWINAPIOpenProcessToken( //打开与进程相关联的访问令牌 _In_ HANDLE ProcessHandle, //所要提升进程的句柄 _In_ DWORD DesiredAccess, //选择所要操作的类型,指定请求的访问令牌访问类型 _Outptr_ PH
2020-11-15 16:45:11 1748
原创 自用Windows API 整理
自用Windows API 整理进程相关进程相关CreateToolhelp32Snapshot//CreateToolhelp32Snapshot可以通过获取进程信息为指定的进程、//进程使用的堆[HEAP]、模块[MODULE]、线程建立一个快照。HANDLE CreateToolhelp32Snapshot( DWORD dwFlags, //指定快照返回的对象 DWORD th32ProcessID //要获取的进程id,指定为0时默认获取所有进程的快照 );
2020-11-13 17:26:10 89
原创 C++Leetcode--329. 矩阵中的最长递增路径
329. 矩阵中的最长递增路径中文版本链接link思路:该题直接是由dfs会超时,我使用的是dfs+记忆的方法ac的。关键点在于对于已经遍历过的节点保存以其为根的最长增长路径,这样在再次访问到这个节点的时候就可以直接返回不需要再次求取了。class Solution {public: int dfs(vector<vector<int>>& matrix, int row, int col, vector<vector<int>>&
2020-11-11 21:21:25 327
原创 C++Leetcode--31. 下一个排列
31. 下一个排列中文版本链接link思路:1.首先从右向左遍历列表,找到第一个下降的点即nums[i] < nums[i+1],这个i就是需要替换的位置。2.将i之后的点即[i+1, nums.size()-1]这个区间里的数倒序排列3.在[i+1, nums.size()-1]这个区间里找到大于nums[i]且最接近num[i]的点,交换位置。class Solution {public:void nextPermutation(vector<int>& nu
2020-11-11 21:12:20 97
原创 windbg命令整理
windbg命令整理基础命令调试命令模块信息调试符号线程栈设置断点基础命令说明命令用法描述帮助?/.help/.hh?/.help/.hh常规命令/元命令/打开windbg help文档清空屏幕.cls.cls清空屏幕查看异常信息.excr/.lastevent/.exr -1/!analyze!analyze -v/!analyze -hang/!analyze -f显示当前异常信息/分析线程栈,看是否有线程blocking其他线程/See an
2020-10-13 17:15:24 220
原创 一些QT控件类的属性初始化
一些QT控件类的属性初始化QListWidgetQTableWidgetQListWidget//列表初始化,并隐藏 QVBoxLayout* vlayout = new QVBoxLayout(); ui.widget_2->setLayout(vlayout); m_pListwidget = new QListWidget(ui.widget_2); m_pListwidget->setAlternatingRowColors(true); //交替行颜色 m_pListwi
2020-09-05 15:46:06 1258
原创 QT实现窗口可拖动
QT实现窗口可拖动QT实现串口可拖动需要在窗口类中重写以下三个函数:virtual void mousePressEvent(QMouseEvent* event);virtual void mouseMoveEvent(QMouseEvent* event);virtual void mouseReleaseEvent(QMouseEvent* event);同时定义以下三个类属性用于窗口拖动判断和位置偏移计算:bool m_bDragging; // 是否正在拖动QPoint m_p
2020-09-05 11:56:18 2895
原创 lambda表达式
lambda表达式学习 Effective Modern C++ 第6章 笔记避免lambda表达式的默认捕获模式按引用捕获的危险情况按值引用的危险情况要点速记使用初始化捕获将对象移入闭包C++14 中使用初始化捕获将对象移入闭包C++11 中模拟初始化捕获要点速记学习 Effective Modern C++ 第6章 笔记避免lambda表达式的默认捕获模式C++11有两种默认捕获模式:按引用与按值。按引用捕获的危险情况std::function 头文件 #include < functi
2020-08-21 17:26:34 311 1
原创 使用微软API读写用户自定义ini文件
使用微软API读写ini文件写ini文件的API写文件读ini文件的API读文件写ini文件的APIWritePrivateProfileSectionWritePrivateProfileString WritePrivateProfileStruct写文件WritePrivateProfileString(L"test", TEXT("SD"), TEXT("12"), L"C:\\Users\\test\\source\\repos\\test\\test\\a.ini");其中"t
2020-08-21 15:09:05 182
原创 windows C++获取本机IP地址列表,本机时间,程序运行路径
windows下C++获取本机IP地址列表int32_t GetLocalIP(std::vector<std::string>& vdata){ WSADATA wsaData; int iResult; DWORD dwRetval; struct addrinfo* result = nullptr; struct addrinfo* ptr = nullptr; struct addrinfo hints; struct addrinfo* cur = null
2020-08-18 18:06:07 406
原创 C++递归式遍历文件夹及文件
C++遍历文件夹及文件void GetAllFullTypeFileX86(std::map<std::string, std::string>& files, const std::string& path, const std::string& fileType){ int32_t hFile = 0; //文件句柄 struct _finddata_t fileinfo; //文件信息读取结构 std::string p; i
2020-08-18 18:02:35 766
原创 C++进行文件读写
C++文件读写读文件写文件读文件//逐行读取文件int32_t ReadLineFromFile(const std::string& fileName, std::vector<std::string>& infos){ std::fstream file; file.open(fileName, std::ios::in); if (false == file.is_open())return MYRESULT::OPEN_FILE_ERROR; std::s
2020-08-18 17:58:38 131
原创 C++各种字符串转码实现集合
C++各种转码实现集合string -> wstringwstring -> string更改string编码为gbk格式string -> wstringstd::wstring StringToWstring(const std::string& str){ std::wstring result; //获取缓冲区大小,并申请空间,缓冲区大小按字符计算 int len = MultiByteToWideChar(CP_ACP, 0, str.c_str(),
2020-08-18 17:45:50 660
原创 使用vcpkg 编译支持sftp的libcurl
使用vcpkg 编译支持sftp的libcurllibcurl的编译下载vcpkg编译vcpkg使用vcpkg编译所需的库vs中使用vcpkglibcurl文件上传使用实例libcurl的编译下载vcpkg使用git将vcpkg从github上clone下来:github地址git clone https://github.com/microsoft/vcpkg编译vcpkg使用cmd进入vcpkg所在目录执行批处理文件完成安装。F:\vcpkg>cd vcpkgF:\vcpkg\v
2020-08-18 17:22:49 1616
原创 C++调用外部exe, 并传参获取返回值
C++调用外部exe, 并传参获取返回值调用exeCreateProcess函数原型CreateProcess示例调用exeC++调用使用CreateProcess函数调用外部exe传参并获取其执行结果。CreateProcess函数原型MSDN官方地址介绍BOOL CreateProcess( LPCWSTR pszImageName, // an exe file. LPCWSTR pszCmdLine, // parameter for your exe fi
2020-08-18 16:48:19 6409
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人