![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 66
伐尘
这个作者很懒,什么都没留下…
展开
-
C++ 注册表的实现
C++ 注册表的实现 通常注册表的实现有很多种,这个是基于windows.h 的实现的一种注册表的实现。源码// Regedit.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>//#include "stdafx.h"#include"windows.h"#include <tchar.h>#define SIZE 256int main(){ HKEY hKEY; LPCTSTR da原创 2021-11-27 10:52:14 · 841 阅读 · 0 评论 -
【C++】 .dll,.lib,.def 和 .exp文件
简要的介绍一下在微软开发工具中(VC)静态链接库和动态链接库生成过程中出现的.dll .lib .def 和 .exp文件类型windows平台上可执行文件可能是一个.exe文件也可能四个.dll文件。当然也有一些比较特别的exe或者dll文件,不过他们有其他样式的后缀名比如屏保程序(.scr),ActiveX DLL 用的.ocx 还有各种驱动使用的各种扩展名。这里我们不讨论.com 和一些脚本文件比如.bat .cmd等,虽然他们仍然是可执行文件。原创 2024-07-11 14:31:03 · 718 阅读 · 0 评论 -
【C++11】c++ - libc++abi.dylib:以 std::__1::system_error 类型的未捕获异常终止:互斥锁失败:参数无效
这个崩溃 是可以追踪的 每次都崩溃在。原创 2024-03-19 18:07:01 · 279 阅读 · 0 评论 -
【C++】single header跨平台高效开源日志库Easylogging++的配置和使用
是一个只有单个头文件的开源跨平台日志库,拥有简单易集成,速度极快,线程安全,高效并可配置可扩展等等优点,现在也是我的主力日志库。原创 2023-06-26 00:13:50 · 788 阅读 · 0 评论 -
【C++】【VLD】VLD检测内存泄漏
VLD(全称:Visual Leak Detector)是一款用于 Visual C++ 的免费内存泄露检测工具。与其它内存检测工具相比,它在检测到内存泄漏的同时,还具有如下特点:可得到内存泄漏点的调用堆栈,以及其所在文件及行号;可得到泄露内存的完整数据;可设置内存泄露报告的级别;提供了打包好的 lib 库,使用时无须编译源码,直接使用即可;源码使用 GNU 许可发布,并有详尽的文档及注释。对于想深入了解堆内存管理的读者,是一个不错的选择。原创 2023-06-25 23:43:29 · 2466 阅读 · 1 评论 -
【VS】VS使用scanf函数报错解决方法
首先来看一段很简单的C语言代码这段代码的作用就是输入一个字符串,再把这个字符串输出。在其他IDE(集成开发环境)上,是完全可以运行的,但是在Microsoft Visual Studio(美国微软公司开发的可视化编程开发软件)的系列软件上(),Microsoft Visual Studio系列软件直接使用scanf函数会报错,但是也提供了一个叫scanf_s新格式化输入函数。scanf_s。转载 2022-11-04 16:05:09 · 628 阅读 · 0 评论 -
【C++】产生死锁的原因和必要条件+解决死锁的基本方法
安全状态指系统能按某种进程顺序来为每个进程分配其所需资源,直 至最大需求,使每个进程都可顺利完成。撤消进程:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态.消除为止;资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)可剥夺资源:即当某进程新的资源未满足时,释放已占有的资源(破坏不可剥夺条件)剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态;环路等待条件:在发生死锁时,必然存在一个进程–资源的环形链。转载 2022-11-17 23:48:16 · 1332 阅读 · 0 评论 -
【VSCode】【Cmake】【C++】在Win10系统上使用VScode + Cmake配置C/C++开发环境,实现一键编译运行
前几天在公司的Ubuntu20.04电脑上配置了VSCode + Cmake的C/C++开发环境,可以用来跑跑C/C++的代码,然后,现在住的地方用的Windows,开发环境用的是 Visual C++ 6.0,环境有点老,跑点简单的C代码还行,但是要跑比较复杂的C++代码,代码敲起来就不那么舒服了。所以,就想配置的和公司Ubuntu的C/C++开发环境一样,用VSCode + Cmake配置一套在Win10运行的开发环境,然后再写个简单的“一键编译运行”脚本,运行一下就可以跑程序,岂不美哉~~转载 2022-11-17 22:30:54 · 1199 阅读 · 0 评论 -
【VSCode】【msys2】VS Code + msys2配置Windows下C/C++开发环境
在.vscode目录下新建一个json文件:c_cpp_properties.json,注意includePath和compilerPath要指定到msys2安装目录下。还有个问题,就是VSCode显示#include 这一行有错,鼠标移上去显式找不到依赖文件stddef.h。把这个目录也添加到c_cpp_properties.json的includePath中,问题解决。原因是VSCode做代码分析的时候不知道gcc,选择了MSVC,添加配置文件把编译器改为gcc.愉快的coding!原创 2022-11-17 19:55:56 · 5645 阅读 · 0 评论 -
【C语言】函数参数传递中的一级指针和二级指针
而在添加删除结点的过程中,我们并没有改变函数参数指针的指向,而是通过传入的指针如Node *head,找到要删除结点的位置,并未对该指针做改变,因此退出函数后,该指针无影响。void fun(int *p),指针参数p的副本为_p,编译器使_p=p,_p和p指向相同的内存空间,如果在函数内修改了_p所指向的内容,就会导致p的内容也做相应的改变;通过上述例子,我们可以看到,在某些情况下,函数参数传递一级指针时,在函数体内对指针做变动,也不会对原始指针产生变化,而传递二级指针时,则可以,这是为什么呢?转载 2022-11-04 16:12:39 · 1306 阅读 · 0 评论 -
【C++】易错、经典问题:return不可返回指向栈内存的指针
数据保存在静态存储区与动态存储区的区别就是:静态存储区在编译-链接阶段已经确定了,程序运行过程中不会变化,只有当程序退出的时候,静态存储区的内存才会被系统回收。因为这里的p虽然分配在栈上,但是此时的Hello是一个字符串常量,其存储在静态存储区。从上面的例子我们知道,若函数返回指向栈内存的指针,所得到的结果并不是我们想要的。在其它地方我们还可以看到内存分配还有其他分类,那些都是细分的分类,比如文字常量区、全局数据区等,都归为静态存储区这一个大类。,因此此时的p里的内容是未知的,所以结果无输出。原创 2022-10-26 11:24:23 · 403 阅读 · 0 评论 -
【C++】vector.push_back()具体拷贝机制,超级详细哦
观察vector.push_back()具体拷贝机制。转载 2022-09-05 17:52:57 · 6833 阅读 · 0 评论 -
【C++ 11】c++智能指针转化:static_pointer_cast、dynamic_pointer_cast、const_pointer_cast、reinterpret_pointer_ca
如果需要进行类层次上的上下行转换时,可以使用std::static_pointer_cast()、std::dynamic_pointer_cast、std::const_pointer_cast()和std::reinterpret_pointer_cast()。它们的功能和std::static_cast()、std::dynamic_cast、std::const_cast()和std::reinterpret_cast()类似。,只是dynamic_cast在进行下行转换的时候(即基类到派生类)转载 2022-08-25 11:29:43 · 3271 阅读 · 0 评论 -
【C++11】右值引用(概念,使用场景),移动拷贝构造函数,赋值拷贝构造函数。
详述 C++ 右值引用转载 2022-08-23 16:13:02 · 1801 阅读 · 0 评论 -
【C++】C++ 并行加速
sum)forsum)reduction(+sum))sum)reduction的语法为recutioin(operatorlist)和其他的数据属性子句不一样的是多了一个operator参数。由于最后会进行迭代运算,所以不是所有的运算符都能作为reduction的参数,而且,迭代运算需要一个初始值,不是所有的操作符需要有相同的初始值,一般而言,常见的reduction操作符的初始值为。...转载 2022-07-15 14:19:13 · 551 阅读 · 0 评论 -
【C++ 11】 error C3861: ‘_beginthreadex‘: identifier not found
【C++ 11】 error C3861: '_beginthreadex': identifier not found原创 2022-07-14 16:46:58 · 690 阅读 · 0 评论 -
【C语言】float 类型 = 0 判定
下列关于bool,int,float,指针类型的变量a 与“零”的比较语句正确的有?原创 2022-06-27 18:12:18 · 2933 阅读 · 0 评论 -
【C++11】std::bad_weak_ptr的原因
【C++11】std::bad_weak_ptr的原因一、概述前几天解了一个bug,表象是调用shared_from_this的时候就跑出bad_weak_ptr异常,类A明明是继承自boost::enable_shared_from_this<A>的,一时搞不明白为什么,后来搜了下出现“bad_weak_ptr异常”可能的原因才找到问题所在:创建类A的对象的时候没有用智能指针包裹,而是直接new的裸指针。二、引申enable_from_this 的使用与实现原理说明:shared_f原创 2022-05-19 16:03:41 · 2649 阅读 · 0 评论 -
【C++11】C++/C++11中std::runtime_error的使用
【C++11】std::runtime_error的使用一、概要std::runtime_error:运行时错误异常类,只有在运行时才能检测到的错误,继承于std::exception,它的声明在头文件中。std::runtime_error也用作几个运行时错误异常的基类,包括std::range_error(生成的结果超出了有意义的值域范围)、overflow_error(上溢)、underflow_error(下溢)、system_error(系统错误)。std::runtime_error类没有转载 2022-05-17 16:01:36 · 4722 阅读 · 0 评论 -
【C++】c++编译错误-- C2678 二进制“=”: 没有找到接受“_Ty”类型的左操作数的运算符(或没有可接受的转换)
【C++】c++编译错误-- C2678 二进制“=”: 没有找到接受“_Ty”类型的左操作数的运算符(或没有可接受的转换)代码://by 鸟哥 reverse引起的编译错误//有疑问请留言或加群 1032082534#include<iostream>#include<algorithm>#include<vector>using namespace std;class Point3d{ double x,y,z; public:原创 2022-05-11 10:44:24 · 3708 阅读 · 0 评论 -
【C++11】C++11 std::function, std::bind, std::ref, std::cref
【C++11】C++11 std::function, std::bind, std::ref, std::crefstd::function看看这段代码先来看看下面这两行代码:std::function<void(EventKeyboard::KeyCode, Event*)> onKeyPressed;std::function<void(EventKeyboard::KeyCode, Event*)> onKeyReleased;这两行代码是从Cocos2d-x中转载 2022-05-06 01:23:27 · 191 阅读 · 0 评论 -
【STL】List容器的splice及std::partition用法
【STL】List容器的splice及std::partition用法list容器內建splice這個函數,可以將容器依指定範圍切割,以及std的partition可以對容器中的元素進行條件篩選並排續,稱著記憶猶新趕快記錄下來用法。#include <list>#include <iostream>#include <algorithm>#include <random>#include <string>using namespa转载 2022-05-05 10:24:05 · 350 阅读 · 0 评论 -
【C++11】【多线程与并发】C++11 多线程下生产者消费者模型详解
【C++11】【多线程与并发】C++11 多线程下生产者消费者模型详解生产者消费者问题是多线程并发中一个非常经典的问题,相信学过操作系统课程的同学都清楚这个问题的根源。本文将就四种情况分析并介绍生产者和消费者问题,它们分别是:单生产者-单消费者模型,单生产者-多消费者模型,多生产者-单消费者模型,多生产者-多消费者模型,我会给出四种情况下的 C++11 并发解决方案,如果文中出现了错误或者你对代码有异议,欢迎交流 😉。单生产者-单消费者模型顾名思义,单生产者-单消费者模型中只有一个生产者和一个消费者,原创 2022-05-05 09:40:05 · 653 阅读 · 0 评论 -
【C++11】c++11 异常处理
【C++11】c++11 异常处理概要异常是程序执行期产生问题,比如尝试除以零的操作。异常提供了一种转移程序控制权的方式。C++ 异常处理涉及到三个关键字:try、catch、throw:throw: 当问题出现,程序通过throw抛出一个异常;catch: 在你想要处理问题的地方,通过异常处理程序捕获异常;try: try 块中的代码标识将被激活的特定异常。它后面允许跟着一个或多个 catch 块;使用 try/catch 语句的语法:try { // 保护代码原创 2022-05-05 00:06:06 · 896 阅读 · 0 评论 -
【C++11】【多线程与并发】std::future和std::promise
【C++11】【多线程与并发】std::future和std::promisestd::futurestd::future期待一个返回,从一个异步调用的角度来说,future更像是执行函数的返回值,C++标准库使用std::future为一次性事件建模,如果一个事件需要等待特定的一次性事件,那么这线程可以获取一个future对象来代表这个事件。异步调用往往不知道何时返回,但是如果异步调用的过程需要同步,或者说后一个异步调用需要使用前一个异步调用的结果。这个时候就要用到future。线程可以周期性的在原创 2022-05-04 19:50:01 · 957 阅读 · 0 评论 -
【STL】for_each()算法
【STL】for_each()算法一、for_each()概述for_each()算法非常灵活,允许你以不同的方式访问、处理、修改每一个元素因此,for_each()既属于非更易型算法,又属于更易型算法备注:自C++11起,range-based for循环提供了更方便更自然的行为。因此,for_each()可能逐渐降低其重要性二、for_each()语法头文件:<algorithm>相关语法:对区间[beg,end)中的每一个元素调用op(elem)返回op(它已在转载 2022-04-29 17:53:44 · 1990 阅读 · 0 评论 -
【OpenMp】openMP学习开发笔记
【OpenMp】openMP学习开发笔记最近用到openMp,于是查了些资料,了解了一下,一些笔记如下,分享出来,如有不当之处,还望给出指正。openMP是一种操作级并行的框架,它可以利用多线程来增强程序的性能。可以对 For循环,或者几个语句Sections块进行并行。openMP是一个跨平台的框架,已经被内置到很多IDE种,如VS2017。函数级别的并行,可能还是得用Thread来进行。文章目录【OpenMp】openMP学习开发笔记Parallel指令的用法:For指令的用法:Sectio转载 2022-04-28 14:24:18 · 195 阅读 · 0 评论 -
【OpenMP】OpenMP: 多线程文件操作
【OpenMP】OpenMP: 多线程文件操作简介OpenMP是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受,用于共享内存并行系统的多处理器程序设计的一套指导性编译处理方案(Compiler Directive) 。OpenMP支持的编程语言包括C、C++和Fortran;而支持OpenMp的编译器包括Sun Compiler,GNU Compiler和Intel Compiler等。OpenMp提供了对并行算法的高层的抽象描述,程序员通过在源代码中加入专转载 2022-04-28 13:43:45 · 3281 阅读 · 3 评论 -
【STL】删除元素 remove、erase
【STL】删除元素 remove、eraseSTL功能很强大,但是说到删除元素,不少人会觉得有些上头。删除元素,第一印象可能就是erase和remove。removeremove,在STL不止一个,有全局std::remove函数,list容器中,还有一个名为remove的成员函数;两个函数的名称完全一样,很多人傻傻分不清。有以下几点区别:std::remove适用于很多容器,list只是其中之一;而list的成员函数remove,既然是成员函数,肯定是它独享咯!std::remove转载 2022-04-27 09:21:53 · 1697 阅读 · 0 评论 -
【STL】C++ 使用erase-remove_if惯用法
【STL】C++ 使用erase-remove_if惯用法第一种我想删除所有将.first值设置为4的对.stopPoints.erase(std::remove_if(stopPoints.begin(),stopPoints.end(),[&](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }));第二种#include <vector> // the general-pur原创 2022-04-26 18:01:59 · 1792 阅读 · 0 评论 -
【C++11】std::future和std::shared_future区别
【C++11】std::future和std::shared_future区别std::future使用可以处理所有在线程间数据转移的必要同步,但是std::future模型独享同步结果的所有权。并且通过 get() 函数,一次性的获取数据,让并发访问变的毫无意义。你的并发代码没有办法让多个线程等待同一个事件。std::shared_futurestd::shared_future 可以完成让多个线程的等待std::promise<std::string> p;std::shared转载 2022-04-26 10:52:58 · 372 阅读 · 0 评论 -
【C++11】C++并发编程
【C++11】C++并发编程前言首先需要说明,本博客的主要内容参考自Forhappy && Haippy博主的分享,本人主要是参照博主的资料进行了学习和总结,并适当的衍生或补充了相关的其他知识内容。C++11有了std::thread 以后,可以在语言层面编写多线程程序了,直接的好处就是多线程程序的可移植性得到了很大的提高。C++11 新标准中引入了四个头文件来支持多线程编程,他们分别是,和。:该头文主要声明了两个类, std::atomic 和 std::atomic_flag转载 2022-04-26 10:00:02 · 1133 阅读 · 0 评论 -
【C++11】static_assert 与assert区别
【C++11】static_assert 与assert区别背景assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。assert分为动态断言和静态断言2种。c++11引入了static_assert关键字,用来实现编译期间的断言,叫静态断言。static_assert优势:静态断言在编译时进行处理,不会产生任何运行时刻空间和时间上的开销,这就使得它比assert宏具有更好的效率。另外比较重原创 2022-04-25 11:25:09 · 320 阅读 · 0 评论 -
c++ 输入文件流ifstream用法详解
文章目录c++ 输入文件流`ifstream`用法详解输入流的继承关系:C++ 使用标准库类来处理面向流的输入和输出:成员函数Public member functions1. **`(constructor)`**2. **`ifstream::open`**3. **`ifstream:: is_open`**4. **`ifstream:: close`**5. **`ifstream:: rdbuf`**6. **`ifstream:: operator =`**Public member func转载 2022-04-21 14:27:07 · 26277 阅读 · 0 评论 -
C++ #if、#elif、#else和#endif指令 的使用
C++ #if、#elif、#else和#endif指令 的使用#if、#elif、#else和#endif指令 的作用#if 指令,与 #elif, #else和 #endif 指令,控件源文件的生成。如果表达式编写 (在 #if) 后有一个非零值,在 #if 指令后的行组在该翻译单元保留#if注意使用:必须以结束 #endif 指令与源文件中的每个 #if 指令。任意数量的 #elif 指令可以出现在 #if 和 #endif 指令之间,但是,最多一个 #else 指令允许。#else 指令,如转载 2022-04-21 09:05:08 · 2320 阅读 · 0 评论 -
C语言(C++)中:详解floor函数、ceil函数和round函数
C语言(C++)中:详解floor函数、ceil函数和round函数C语言中1.floor函数功能:把一个小数向下取整 即就是如果数是2.2 ,那向下取整的结果就为2.000000原型:double floor(doube x); 参数解释: x:是需要计算的数返回值: 成功:返回一个double类型的数,此数默认有6位小数 无失败的返回值头文件:#include<math.h>示例floor函数计算后的结果为double类转载 2022-04-20 16:56:50 · 21728 阅读 · 3 评论 -
VS自带工具:dumpbin的参数详解
VS自带工具:dumpbin的参数详解一般情况下,我们需要查看一个DLL或EXE中的包含的函数或是依赖的函数之类的信息,可以使用VS自带的工具dumpbin;可以直接在命令行下输入dumpbin就可以查看他的使用说明,如果未显示,可以先运行VS安装目录下的vcvarsall.bat来设置一下环境变量就可以了Microsoft Windows XP [版本 5.1.2600](C) 版权所有 1985-2001 Microsoft Corp. C:/Documents and Settings/Ad原创 2022-04-16 18:53:30 · 1874 阅读 · 0 评论 -
std::map c++两个map合并成一个map ,c++多个map的合并
std::map c++两个map合并成一个map ,c++多个map的合并两个map合并成一个map,用insert()函数就可以了,看代码:#include <map>#include <iostream>int main(){ std::map<int, int> v1 = {{1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}}; std::map<int, int> v2 = {转载 2022-04-14 15:59:17 · 2162 阅读 · 0 评论 -
[Qt] 单击任务栏图标实现最小化
Qt中对于窗口边框的设置一般用到setWindowFlags函数。void setWindowFlags(Qt::WindowFlags type)如果只setWindowFlags(Qt::FramelessWindowHint);去掉边框,此时会发现,当程序打开后,单击任务栏的按钮,会发现无法最小化,隐藏窗口。解决的方法是:setWindowFlags(Qt::Window \|Qt::FramelessWindowHint\|Qt::WindowSystemMenuHint\|Qt转载 2022-04-09 10:18:41 · 2537 阅读 · 0 评论 -
C++中ofstream写入文件使用例程
C++中ofstream写入文件使用例程文章目录C++中ofstream写入文件使用例程1.添加头文件2.打开文件3.关闭文件4.csv文件和txt文件区别1.添加头文件#include <fstream>#include <sstream> using namespace std;2.打开文件//在实际应用中,根据需要的不同,选择不同的类来定义:如果想以输入方式打开,就用ifstream来定义;//如果想以输出方式打开,就用ofstream来定义;如果想以输入/转载 2022-04-07 11:49:06 · 7978 阅读 · 0 评论