
C++ 开发技巧总结
文章平均质量分 80
介绍C++高级语法、C++ 11、多线程、线程池等技术,C++数据库操作,C++常用开发组件的使用,提供全部源码.
优惠券已抵扣
余额抵扣
还需支付
¥99.90
¥299.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
令狐掌门
C++程序员,出版过《C++零基础入门视频教程》、《Qt高级进阶视频教程》、《C++ Qt6 QtQuick/QML入门进阶视频教程》、《OBS源码分析与桌面录制视频教程》、《PyQt PySide6零基础入门与项目实战》。
展开
-
C++内部类用法介绍
是在另一个类的作用域内定义的类。它的主要作用是封装逻辑关系紧密的类,使其不能被外部直接访问,从而增强封装性和代码的可读性。内部类不能直接访问外部类的成员,但可以通过外部类对象的引用或指针来访问。内部类是 C++ 代码组织的重要手段,使用得当可以提高代码的。如果内部类需要直接访问外部类的私有成员,可以将其声明为。,这决定了外部类和外部代码对其访问的权限。内部类可以用来封装某些结构或节点,例如。的内部类,实现了自定义迭代器的功能。的友元类,所以它可以直接访问。内部类不能直接访问外部类的非。原创 2025-02-28 17:12:24 · 59 阅读 · 0 评论 -
C++使用线程池模拟异步事件处理机制
在C++很多框架中都有异步事件处理机制,这导致我们在看源码时经常很疑惑,难以理解,而其中包含的编程套路可能是一些成熟的技术,只是我们不熟悉,比如WebRTC中类似于Qt的信号槽机制,线程事件处理, 或者使用系统异步IO等等,如果看不懂这些套路,理解代码会很难,本篇博客来尝使用用C++线程池实现一种异步事件处理机制。原创 2023-11-11 15:06:04 · 503 阅读 · 0 评论 -
C++线程任务队列模型
这个程序实现了一个简单的任务队列,其中任务类表示一个可执行的任务,具有状态(未开始、进行中、已完成)。任务队列类负责管理任务的添加和执行,执行方式为串行执行。每个任务的执行时间是随机的,并且在执行过程中会输出当前的进度信息。在任务队列中添加2个任务并执行,所有任务完成后退出程序。串行任务队列开始执行,共有2个任务。实现一个任务队列,用于任务的执行。任务1开始执行,将运行3秒。任务2开始执行,将运行2秒。串行队列执行输入示例如下。任务1已完成100%任务2已完成100%原创 2024-05-29 01:15:16 · 372 阅读 · 0 评论 -
C malloc经典面试题解答与分析
本篇博客介绍关于C malloc经典的错误代码写法以及解决方法。原创 2024-06-21 21:30:00 · 1091 阅读 · 0 评论 -
C++ vector操作总结
推荐insert是最直观且高效的方法,适用于大多数场景。注意:如果需要保留原始向量不变,可以先创建副本,然后操作副本。性能和std::copy都是高效的批量操作,但在处理非常大的向量时,std::move可以减少复制开销。如果使用 C++17 或更低版本,推荐方法 1或方法 2,它们兼具易读性和性能。如果使用 C++23,是最现代的实现方式,代码更加简洁。使用std::sort搭配 Lambda 表达式是最简洁的实现方式。原创 2024-11-20 21:40:20 · 117 阅读 · 0 评论 -
C++ enable_shared_from_this使用详解
enable_shared_from_this 是 C++ 标准库中提供的一个辅助类模板,主要用于支持对象从成员函数中安全地获得一个 shared_ptr 指向它自己。它的作用是允许对象在其成员函数内部生成指向它本身的 shared_ptr,从而确保对象在生命周期管理中的正确性,特别是在对象存在于多个地方并且需要共享所有权时。原创 2024-11-08 21:29:50 · 187 阅读 · 0 评论 -
C++ std::optional用法介绍
是 C++17 引入的一个模板类,它提供了一种表达可选值的方式,即一个变量可以包含一个有效值或者不包含值(即为空)。这在处理可能返回空值的函数或者值可能不存在的情况下特别有用。原创 2024-11-06 20:57:50 · 139 阅读 · 0 评论 -
CMake教程:C++ CMake自定义find_package并在其它项目使用
find_package 是 CMake 中一个非常重要的命令,用于在系统中找到外部库或包,并将其包含到项目中。: 要查找的包的名称。[version]: 可选的版本号。如果指定了版本号,CMake 会尝试找到该版本或更高版本的包。[REQUIRED]: 如果指定了这个关键字,找不到包时会产生一个错误并终止配置过程。: 指定要查找的包的组件。: 指定可选的组件,即使找不到这些组件,配置过程也会继续。: 指定查找包的模式,CONFIG表示查找配置文件,MODULE表示查找模块文件。原创 2024-07-22 22:22:57 · 893 阅读 · 0 评论 -
C++如何把图片转成base64数据
在C++中将图片转换为Base64格式涉及几个步骤,主要是读取图片文件的二进制数据,然后将这些数据编码为Base64字符串。这个过程通常需要用到额外的库来辅助完成,例如使用开源库如OpenSSL来进行Base64编码,以及使用标准库来处理文件输入输出。运行程序之前,确保修改文件路径为实际图片文件的路径。这个程序将输出Base64编码的字符串,可用于网页显示或其他需要Base64编码的场景。首先,确保你的系统中安装了OpenSSL库。原创 2024-04-15 21:27:32 · 434 阅读 · 0 评论 -
C++ std::copy和copy_if用法介绍
在C++标准库中,std::copy 和 std::copy_if 是算法库的一部分,用于复制一系列元素。std::copy 函数用于将一系列元素从一个容器复制到另一个容器。这个函数在 头文件中定义。原创 2023-12-01 08:44:26 · 617 阅读 · 0 评论 -
C++ vector pair用法介绍
作者:令狐掌门技术交流QQ群:675120140。原创 2023-11-30 09:17:02 · 1436 阅读 · 0 评论 -
C++ 17实现无锁队列
在软件编程中,无锁队列是一种特殊类型的数据结构,它允许多个线程在不使用传统互斥锁(如mutexes)的情况下进行并发访问。无锁队列通过使用原子操作来确保线程安全,原子操作是一种不可中断的操作,它可以在单个步骤中完成,无需锁定资源。性能提升:无锁队列通常比使用锁的队列有更好的性能,因为它们避免了锁的开销,包括上下文切换、线程调度延迟和潜在的死锁问题。可扩展性:在多处理器系统中,无锁队列可以更好地扩展。随着处理器数量的增加,使用锁的队列可能会遇到瓶颈,因为多个线程竞争同一个锁。原创 2023-11-29 09:23:30 · 1091 阅读 · 0 评论 -
尝试用C++从实现一个可用的内存池
作者:令狐掌门技术交流QQ群:675120140。原创 2023-11-29 09:22:59 · 1043 阅读 · 0 评论 -
Linux POSIX C/C++线程API介绍与代码演示
Linux POSIX API(Application Programming Interface)是一组用于编写可移植的多线程、进程间通信、文件操作等系统级应用程序的标准接口。它遵循POSIX(Portable Operating System Interface for Unix)标准,POSIX是一组定义了操作系统接口的标准,旨在提高可移植性和互操作性。Linux POSIX API提供了许多函数和数据类型,用于创建和管理线程、进程间通信、文件操作、信号处理、互斥锁、条件变量等。原创 2023-08-10 22:17:35 · 701 阅读 · 0 评论 -
Linux C++ 网络编程基础(2) : TCP多线程一个server对应多个client
Linux POSIX线程库提供了一组函数来创建、管理和同步线程。:创建一个新的线程。return 0;:等待一个线程的结束。return 0;:初始化一个互斥锁。return 0;:初始化一个条件变量。return 0;原创 2023-08-10 21:48:47 · 1814 阅读 · 0 评论 -
Linux C++网络编程基础(1):TCP服务端与客户端的实现
这两段代码分别实现了一个简单的服务器和客户端。服务器创建一个socket,绑定到一个特定的端口,并开始监听这个端口。当一个客户端连接到这个端口时,服务器接收客户端发送的消息,然后向客户端发送一个响应。在Linux环境下,我们可以使用socket编程来实现网络通信。下面是一个简单的C++版本的客户端和服务端的示例代码。这只是一个非常基础的示例,实际的网络编程可能会涉及到更复杂的情况,比如多线程或者非阻塞IO等。客户端创建一个socket,连接到服务器的特定端口,发送一个消息,然后等待服务器的响应。原创 2023-08-07 16:48:07 · 1581 阅读 · 0 评论 -
vscode ssh linux C++ 程序调试
vscode调试c++程序相比vs2022要复杂很多,vs2022可以"一键运行调试",vscode则需要自己配置。vscode调试程序时,会在当前工作目录产生.vscode目录, 该目录有两个重要文件和tasks.json, 下面介绍两种调试方法: 手动调试和自动调试。原创 2023-10-09 23:41:54 · 920 阅读 · 0 评论 -
C++实现线程安全的vector
如果你需要支持迭代器,你可能需要使用一个不同的设计,例如,你可以返回一个持有锁的“代理”对象,该对象在析构函数中释放锁。的每个操作都是线程安全的,但如果你需要进行多个操作并且这些操作需要一起原子地(atomically)完成,那么你可能需要在你的代码中添加额外的同步。如果你的应用程序需要更高的并行性,你可能需要使用更复杂的数据结构或同步策略,例如,你可以使用一个并行数据结构库,或者实现一个读写锁策略,允许多个线程同时读取vector。方法,因为在调用这两个方法之间,其他线程可能已经修改了vector。原创 2023-11-20 20:35:15 · 652 阅读 · 0 评论 -
C++实现线程安全的map
是C++17标准中引入的一种新的线程同步原语。它是一个允许多个读取者与单一写入者并发访问共享数据的互斥锁。共享锁定(Shared Locking):在共享锁定期间,其他线程可以同时获取共享锁定,但不能获取独占锁定。这通常在只读操作中使用,因为多个线程可以同时读取数据,而不会彼此干扰。独占锁定(Exclusive Locking):在独占锁定期间,其他线程既不能获取共享锁定,也不能获取独占锁定。这通常在写入操作中使用,以确保数据在写入期间不会被其他线程修改。lock(): 获取独占锁定。原创 2023-11-20 20:32:58 · 781 阅读 · 0 评论 -
C++17 string_view用法介绍
这个内存池使用一个vector来存储内存块,每个内存块的大小为blockSize。allocate函数会从freeList中取出一个内存块并返回,如果freeList为空,则会调用expandPool函数来扩展内存池。在示例中,我们使用内存池来分配和释放int类型的内存块。首先,我们分配一个内存块并将其赋值为42,然后再分配一个内存块并将其赋值为99。最后,我们释放这两个内存块。请注意,这只是一个简单的内存池实现示例,实际的内存池可能需要更复杂的管理和分配策略,以及对内存对齐和内存泄漏等问题的处理。原创 2023-08-07 16:21:27 · 259 阅读 · 0 评论 -
c++ http url encode decode
这些代码示例演示了如何使用C++对URL进行编码和解码。请注意,这些示例仅处理URL中的特殊字符,而不处理URL中的查询参数等其他部分。如果需要处理更复杂的URL,请使用相应的URL库或框架。原创 2023-08-01 11:56:59 · 1165 阅读 · 0 评论 -
C++ RapidJSON使用详解
RapidJSON主页:RapidJSON 是由腾讯开发的一个 C++ 的 JSON 解析器及生成器,它的灵感来自 RapidXml。原创 2023-06-03 23:39:22 · 1567 阅读 · 0 评论 -
C++模拟go defer
在Go语言中,defer语句用于在函数返回之前执行一些代码。这对于释放资源或记录函数执行时间非常有用。当函数中有多个defer语句时,它们将按照后进先出(LIFO)的顺序执行。结果输出。原创 2023-04-10 22:45:14 · 528 阅读 · 0 评论 -
Modern C++ JSON nlohmann::json 使用详解
Modern C++ json使用方法原创 2022-05-25 16:00:41 · 2185 阅读 · 0 评论 -
C++ mysql connector使用方法
mysql connector的下载 C++ 操作mysql数据库可以用原生的api, 也可以用mysql connector, 在mysql下载页可以找到下载入口 https://dev.mysql.com/downloads/, 如下图:在vs2019中的配置头文件 Conneector 的使用方式和常规sdk一样,包含头文件,静态库,动态库即可。注意Conneector 在8.0之后需要boost支持,在vs中需要配置boost的路径,如下:lib路径 在附加依赖项添加静态库名原创 2021-04-23 19:07:47 · 1611 阅读 · 0 评论 -
windows C++ 网络编程
一、什么是Socket socket即套接字,用于描述地址和端口,是一个通信链的句柄。应用程序通过socket向网络发出请求或者回应。 sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);前两种较常用。基于TCP的socket编程是采用的流式套接字。 ...原创 2019-06-10 21:16:24 · 13219 阅读 · 0 评论 -
C++ tcp一个服务端对应多个客户端
在tcp编程时,有时服务端需要处理多个客户端的连接,下面给出处理模型,在服务端监听后,写个while循环处理多个客户端的连接.tcp server代码如下:#include <winsock2.h>#include <iostream>#include <thread>using namespace std;//链接socket lib#pragma comment(lib, "ws2_32.lib")//线程处理函数void ThreadFun原创 2021-07-12 20:34:17 · 1080 阅读 · 0 评论 -
C++模板特化与偏特化的说明与代码示例
模板特化的定义模板特化不同于模板的实例化,模板参数在某种特定类型下的具体实现称为模板的特化,以实现特定类型下非通用行为。模板特化有时也称之为模板的具体化,分别有函数模板特化和类模板特化。特化主要分三种(1)全特化:将模板的参数全部指定为特定类型,类和函数都支持(2)偏特化:部分参数指定为特定的类型,模板函数不支持偏特化(3)特化为另外一个类模板(复杂点的偏特化),其实这种也是类似于1,2形式类的特化例如下面是类的全特化与偏特化的写法:#include <iostream>us原创 2021-04-09 19:24:53 · 411 阅读 · 0 评论 -
C++类默认有哪些函数
例如下面一个空类Test,没有任何代码class Test{};一 空类的大小 在main方法中计算Test空类的大小,int main() { cout << "空类大小是 : " << sizeof(Test) << endl; return 0;} 输出结果:空类大...原创 2020-03-31 23:19:48 · 631 阅读 · 0 评论 -
vs2017编译使用jsoncpp
C++ 解析json的方式有很多,libjson, jsoncpp, boost等,我的另一篇博客有boost解析json的用法,有兴趣的可以看看,本篇介绍jsoncpp的使用。一 、cmkae vs2017编译jsoncpp 下载jsoncpp源码:https://github.com/open-source-parsers/jsoncpp 在源...原创 2020-04-06 23:23:57 · 3193 阅读 · 4 评论 -
STL multiset使用说明与代码演示
STL multiset特点 (1)数据有序,可重复 (2)删除元素时,相同的所有元素都会被删掉 使用时需要包含头文件<set>. 代码:#include <iostream>#include <set>using namespace std;//输出multisetvoid out(const multiset<int> obj){ for (auto item ...原创 2020-05-17 22:14:03 · 264 阅读 · 0 评论 -
C++ STL之set
1. SLT介绍set 特点:关联容器,值唯一,有序。内部实现是红黑树。C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。在面试时经常会问到如下问题:(1)为何map和set的插入...原创 2019-09-09 18:51:36 · 754 阅读 · 0 评论 -
C++ STL multimap与unordered_map
一 multimap用法说明 multimap, 允许元素重复的关联容器,它的内部实现也是用的红黑树,例如下面的代码#include <iostream>#include <map>#include <string>using namespace std;int main(){ multimap<int, string> mmap = { {3, "鲁班"}, {2, "后裔"} }; mmap.insert(mak......原创 2020-07-17 22:48:50 · 1122 阅读 · 0 评论 -
VS2019编译OpenSSL源码
OpenSSL是什么? OpenSSL是一个开放源代码的软件库包,英文全称是Open Secure Sockets Layer,中文叫法是开放式安全套接层协议。应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。 官网 https://www.openssl.org/ github : https://github.com/openssl/openssl github 代...原创 2021-04-04 15:57:43 · 495 阅读 · 0 评论 -
c++ zlib加密压缩文件详细介绍与代码演示
c++ zlib加密压缩文件 windows平台可以下载zip或者tar.gz的文件,目前的版本是1.2.11,下面将提供3种编译方法。一 命令行形式编译 在开始菜单找到VS2017x64_x86交叉工具命令提示符,注意这样编译的32位的版本。跳转到zli...原创 2020-02-03 12:32:57 · 2555 阅读 · 0 评论 -
VS2015编译 Lua源码
Lua作为一门热门的脚本语言, 在游戏,程序热更新等领域使用很广,Lua的解释器是用C语言写的,源码不过一万多行。作为程序员,详细学习一门语言的源码是很有必要的,可以说Lua的源码,是程序员最容易掌握的,不像JVM那么庞大。 Lua和Java一样,也是基于“虚拟机”的,下面介绍Lua源码的编译方法,开发工具是VS2015, 源码版本Lua5.3.4, 没有该版本的,可...原创 2019-01-10 10:22:37 · 631 阅读 · 0 评论 -
vs2017编译libcurl源码
libcurl简介 当客户端项目设计到web开发时,需要使用到相关通信框架,libcurl是很好的选择,使用libcurl和服务端通信,获取相关数据,在客户端再做相关逻辑处理。 libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书...原创 2020-04-07 12:00:46 · 673 阅读 · 0 评论 -
VS2017编译sqlite3生成lib,dll
sqlite官网:https://www.sqlite.org/index.html sqlite3源码及dll下载链接:https://www.sqlite.org/download.html 官网只提供了dll, 没有lib, 需要我们自己编译。vs编译sqlite的方法有两种,一种是建立工程源码编译,另一种是命令行编译,下面分别介绍。1 命令行编译 把路径 C:\Program Files (x86)\Microsoft Visual ...原创 2020-05-11 19:43:26 · 1070 阅读 · 0 评论 -
C++ sqlite基本操作代码示例
在sqlitebrowser中创建一个数据库,添加一些数据。如下: 用vs2017创建C++控制台项目,配置好sqlite sdk,.h, .lib, .dll, 即可进项编程了。C++代码:/*sqlite数据库基本使用*/#include <iostream>#include "sqlite3.h"#include <Windows.h>#pragma comment(lib, "sqlite3.lib")using name...原创 2020-05-11 21:24:27 · 763 阅读 · 0 评论 -
C++ tinyxml2解析xml文件【详细代码】
tinyxml2官网:http://www.grinninglizard.com/tinyxml2/index.html github下载链接:https://github.com/leethomason/tinyxml2 源码文件就两个, .h .cpp, 可以直接放到项目中使用,也可以编译成lib或者dll在程序中引用。下面介绍如果编译成dll: 在tinyxml2目录有vs的解决方案文件 上面显示的是VS2010的项目,我用vs...原创 2020-05-10 23:01:10 · 1190 阅读 · 0 评论