![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++开发实战分享
文章平均质量分 72
曾经的C++ 的程序员,常用的积累代码归类,封装,开源和分享出来,内容涵盖了多线程,日志,网络通讯,文件操作分享给各位,希望对大家有帮助,谢谢大家。
wx:houxian1103
houxian1103
这个作者很懒,什么都没留下…
展开
-
jsoncpp win下的编译与使用
Jsoncpp 说明:Jsoncpp 是个跨平台的 C++ 开源库,提供的类为我们提供了很便捷的操作,而且使用的人也很多。在使用之前我们首先要从 github 仓库下载源码,地址如下:https://github.com/open-source-parsers/jsoncpp我们从 github 中获取的git不能在vs 中直接进行编译,必须要进行要使用cmak 进行转换。生成vs 工程首先现在cmake 进行安装https://cmake.org/download/下载后自行安装。原创 2022-03-08 00:52:30 · 1578 阅读 · 0 评论 -
C++ 11 智能指针
智能指针的作用C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存。使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等,使用智能指针能更好的管理堆内存。理解智能指针需要从下面三个层次:从较浅的层面看,智能指针是利用了一种叫做RAII(资源获取即初始化)的技术对普通的指针进行封装,这使得智能指针实质是一个对象,行为表原创 2022-02-04 21:19:35 · 3169 阅读 · 1 评论 -
C++ 11新特性 (三)
右值引用C++11 增加了一个新的类型,称为右值引用( R-value reference),标记为 &&和声明左值引用一样,右值引用也必须立即进行初始化操作,且只能使用右值进行初始化,比如:int num = 10;//int && a = num; //右值引用不能初始化为左值int && a = 10;和常量左值引用不同的是,右值引用还可以对右值进行修改。例如:int && a = 10;a = 100;cout &原创 2022-02-04 00:44:44 · 928 阅读 · 0 评论 -
C++11 新特性(二)
for 循环C++11这次的更新带来了令很多C++程序员期待已久的for range循环,每次看到javascript, lua里的for range,心想要是C++能有多好,心里别提多酸了。这次C++11不负众望,再也不用羡慕别家人的for range了。C++98/03 中普通的 for 循环,语法格式:for(表达式 1; 表达式 2; 表达式 3){ // 循环体}实例代码#include <iostream>#include <vector>us原创 2022-02-01 02:02:48 · 941 阅读 · 0 评论 -
c++ 11 新特性(一)
字符串的原始字面量原始字符串字面量的定义为:R “xxx(raw string)xxx”其中,原始字符串必须用括号()括起来,括号的前后可以加其他字符串,所加的字符串会被忽略,并且加的字符串必须在括号两边同时出现。#include <iostream>#include <string>int main(){ // 一个普通的字符串,'\n'被当作是转义字符,表示一个换行符。 std::string normal_str = "First line.\nS原创 2022-01-30 01:18:56 · 438 阅读 · 0 评论 -
C语言实现的线程池
原理说明:我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务呢?线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多原创 2022-01-29 23:44:25 · 1662 阅读 · 0 评论 -
Socket 套接字之TCP通信
说明:TCP 是一个面向连接的,安全的,流式传输协议,这个协议是一个传输层协议。面向连接:是一个双向连接,通过三次握手完成,断开连接需要通过四次挥手完成。安全:tcp 通信过程中,会对发送的每一数据包都会进行校验,如果发现数据丢失,会自动重传。流式传输:发送端和接收端处理数据的速度,数据的量都可以不一致。交互流程如下:服务器端通信流程:创建用于监听的套接字,这个套接字是一个文件描述符int lfd = socket();将得到的监听的文件描述符和本地的 IP 端口进行绑定bind(原创 2022-01-16 00:29:54 · 2235 阅读 · 1 评论 -
Socket 套接字之UDP通信
前言:UDP 是一个面向无连接的,不安全的,报式传输层协议,udp 的通信过程默认也是阻塞的。UDP通信不需要建立连接 ,因此不需要进行 connect () 操作UDP通信过程中,每次都需要指定数据接收端的IP和端口,和发快递差不多UDP不对收到的数据进行排序,在UDP报文的首部中并没有关于数据顺序的信息UDP对接收到的数据报不回复确认信息,发送端不知道数据是否被正确接收,也不会重发数据。流程说明:使用 UDP 进行通信,服务器和客户端的处理步骤比 TCP 要简单很多,并且两端是对等的原创 2022-01-15 00:52:23 · 3958 阅读 · 0 评论 -
TCP粘包、拆包与解决方案、C++ 实现
说明:TCP(transport control protocol,传输控制协议)是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。即面向流的通信是无消息保护边界的。TCP粘包、拆包图解假设客户端分别发送了两个数据包D1和D2给服务端,由原创 2022-01-10 23:38:17 · 7167 阅读 · 5 评论 -
JsonCpp C++json 解析库
说明:JSON是一种轻量级的数据交换格式。它可以表示数字、字符串、有序的值序列以及名称/值对的集合。JsonCpp 是一个 C++ 库,它允许操作 JSON 值,包括与字符串之间的序列化和反序列化。它还可以在反序列化/序列化步骤中保留现有注释,使其成为存储用户输入文件的便捷格式。https://github.com/open-source-parsers/jsoncpp版本说明:1.y.z 是用 C++11 构建的。0.y.z 可以与较旧的编译器一起使用。00.11.z 可以在新旧编译器原创 2022-01-08 01:13:38 · 1138 阅读 · 0 评论 -
linux 下 使用 C++ Mysql操作
说明:在linux 环境下实现,使用c++ 来访问mysql 数据库,需要如下操作和实例如下:第一步:安装开发库:ubuntu下 : sudo apt-get install libmysqlclient-devcentos下 : sudo yum install mysql-devel只有安装了开发库,我们才可以引用头文件,进行代码的开发第二部:实例代码编写:#include <stdio.h>#include <unistd.h>#include <原创 2022-01-06 20:27:12 · 2200 阅读 · 1 评论 -
httplib 库介绍与使用
说明:cpp-httplib 是个开源的库,是一个c++封装的http库,使用这个库可以在linux、windows平台下完成http客户端、http服务端的搭建,这是一个多线程“阻塞”HTTP 库。使用起来非常方便,只需要包含头文件httplib.h即可。源码库地址:https://github.com/yhirose/cpp-httplibhttplib 库基本结构:发送请求Request类的组成:class Request{ std::string method; // 请求方法原创 2022-01-06 19:54:32 · 17935 阅读 · 1 评论 -
Linux 系统文件读写相关函数说明
前言: 在 Linux 系统中必须要使用系统提供的 IO 函数才能基于这些文件描述符完成对相关文件的读写操作。文件相关函数说明:open/close:#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>/*open是一个系统函数, 只能在linux系统中使用, windows不支持fopen 是标准c库函数, 一般都可以跨平台使用, 可以这样理解: - 在linux中 fop原创 2022-01-04 17:58:31 · 1683 阅读 · 0 评论 -
Linux 动态库 编译和使用
前言:动态链接库是程序运行时加载的库,当动态链接库正确部署之后,运行的多个程序可以使用同一个加载到内存中的动态库,因此在 Linux 中动态链接库也可称之为共享库。动态链接库是目标文件的集合,目标文件在动态链接库中的组织方式是按照特殊方式形成的。库中函数和变量的地址使用的是相对地址(静态库中使用的是绝对地址),其真实地址是在应用程序加载动态库时形成的。在 Linux 中动态库以 lib 作为前缀,以.so 作为后缀,中间是库的名字自己指定即可,即: libxxx.so在 Windows 中动态库一般原创 2022-01-02 01:30:20 · 4557 阅读 · 1 评论 -
Linux 静态库 编译和使用
前言:不管是 Linux 还是 Windows 中的库文件其本质和工作模式都是相同的,只不过在不同的平台上库对应的文件格式和文件后缀不同。程序中调用的库是 静态库。在项目中使用库一般有两个目的,一个是为了使程序更加简洁不需要在项目中维护太多的源文件,另一方面是为了源代码保密,毕竟不是所有人都想把自己编写的程序开源出来。静态库:在 Linux 中静态库由程序 ar 生成。在 Linux 中静态库以 lib 作为前缀,以.a 作为后缀,中间是库的名字自己指定即可,即: libxxx.a在 Windo原创 2022-01-02 00:33:24 · 8762 阅读 · 2 评论 -
cJSON库使用
说明:基于 C 语言的 Json 库 – cJson。cJSON 是一个超轻巧,携带方便,单文件,简单的可以作为 ANSI-C 标准的 JSON 解析器。cJSON 是一个开源项目,github 下载地址:https://github.com/DaveGamble/cJSON编译指令:mkdir buildcd buildcmake ..make install如果需要,请安装它。默认情况下,它将头文件/usr/local/include/cjson和库安装到/usr/local/lib原创 2021-12-29 23:50:32 · 2058 阅读 · 0 评论 -
VSCODE中C/C++ 自动提示、补全 配置
前言:近期使用vscode 的编写C/c++ 编写代码,虽然安装了 C/C++ Extension和C/C++ IntellinSense 但是提示还不是很智能,还是需要配置。基本库配置1.打开如下配置:2.修改setting.json可以自行复制{ "workbench.colorTheme": "Default Dark+", "cmake.configureOnOpen": true, "window.zoomLevel": 2, "editor.mini原创 2021-12-27 10:00:54 · 51436 阅读 · 7 评论