![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++
文章平均质量分 58
C++11
Word哥
代码改变世界
展开
-
C++——TCP和UDP头部结构(下)
1. TCP头部结构OSI七层模型网络传输层中,TCP是面向连接、可靠的、字节流传输。TCP协议通信双方必须先建立连接,通信双方必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP是全双工的,即双方的数据读写可通过一个连接进行。完成数据交换之后,通信双方都必须断开连接以释放系统资源。TCP协议的这种连接是一对一的,所以基于广播和多播(目标是多个主机地址)的应用程序不能使用TCP服务。而无连接的UDP则十分适合这种广播和多播。TCP协议使用字节流(UDP使用数据报),实.原创 2020-07-02 16:56:42 · 1493 阅读 · 0 评论 -
C++通过HTTP请求Get或Post方式请求Json数据
最近在工作中,由于合作商只提供uRL,我这边需要通过HTTP请求Get或Post方式请求Json数据,然后解析JSON格式,解析json我使用的第三方库jsoncpp,代码如下#pragma once#include <iostream>#include <windows.h>#include <wininet.h>using names...原创 2017-03-14 16:39:42 · 3213 阅读 · 0 评论 -
C++实现字符串分割(split)
// 字符串分割 std::vector<std::string> CDataCollector::SplitString(std::string& str, const std::string& pattern){ std::string::size_type pos; std::vector<std::string> vecStr; str += pattern; //扩展字符串以方便操作 std::size_t iSize = str.size.原创 2020-06-04 16:36:49 · 641 阅读 · 0 评论 -
HTTPS协议工作原理
1. 为什么需要HTTPS?1) 保护隐私(Privacy):所有信息都是加密传播,第三方无法窃听数据。如果使用 HTTP 明文传输数据的话,很可能被第三方劫持数据,那么所输入的密码或者其他个人资料都被暴露在他人面前,后果可想而知。2) 数据完整性(Integraty):一旦第三方篡改了数据,接收方会知道数据经过了篡改,这样便保证了数据在传输过程中不被篡改。3) 身份认证(Identification):第三方不可能冒充身份参与通信,因为服务器配备了由证书颁发机构(Certificate Aut原创 2020-05-19 11:23:08 · 1482 阅读 · 0 评论 -
C++面试常见问题补充
转载知乎博主总结:C++面试常见问题原创 2020-04-13 20:16:31 · 369 阅读 · 0 评论 -
C++——RAII机制
1. 什么事RAII?RAII是Resource Acquisition Is Initialization(wiki上面翻译成 “资源获取就是初始化”)的简称,是C++语言的一种管理资源、避免泄漏的惯用法。它保证在任何情况下,使用对象时先构造对象,最后析构对象。利用C++构造的对象最终会被销毁的原则。RAII的做法是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访问,...原创 2020-04-13 14:27:58 · 346 阅读 · 0 评论 -
C++设计模式——访问者模式
1. 访问者模式定义:表示一个作用于某对象结构中的各元素操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式适用于数据结构相对稳定的系统。它把数据结构和作用于结构上的操作之间耦合解脱开,使得操作几何可以相对自由地演化。2. 场景举例visitor.h#pragma once#include <iostream>#include &l...原创 2020-04-10 18:22:01 · 234 阅读 · 0 评论 -
C++设计模式——观察者模式
1.观察者模式定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。观察者模式又叫做发布-订阅(Publish-Subscribe)模式、模型-视图(Model-View)模式、源-监听器(Source-Listener)模式。2. 场景举例角色:抽象主题(Subject):该角色是一个抽象类或接口,定义了增加、删除、通知观...原创 2020-04-10 13:35:19 · 2174 阅读 · 3 评论 -
C++设计模式——策略模式
1. 策略模式定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户端。策略模式其实就是我们用一个接口,调用所有的类的入口,从设计模式的角度来说,隔离变化,编程到接口。2. 场景用例假设有一辆汽车,根据汽车的价格我们可以分成奔驰、宝马、奥迪等等,如果我们要实现这个功能,最容易想到的方法就是if--else语句,但是恰恰符合了我们策略模...原创 2020-04-09 13:18:21 · 125 阅读 · 0 评论 -
C++——23种设计模式
23种设计模式可分为三大类:创建型模式(5种): 工厂方法模式:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。使一个类的实例化延迟到其子类。抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创...原创 2020-04-09 09:59:39 · 2409 阅读 · 0 评论 -
C++设计模式——工厂模式
1. 工厂模式介绍工厂模式属于创建型模式可以分为三类:简单工厂模式、工厂方法模式、抽象工厂模式2. 简单工厂模式举例:有一家生产处理器核的厂家,它只有一个工厂,能够生产两种型号的汽车。客户需要什么型号汽车,一定要显示地告诉生产工厂。下面给出一种实现方案。#pragma once#include <iostream>using namespace std;en...原创 2020-04-09 09:33:27 · 347 阅读 · 0 评论 -
C++设计模式——单例模式
1.单例模式定义:保证一个类只有一个实例,并提供一个访问它的全局访问点,使得系统中只有唯一的一个对象实例。应用场景: 1. 需要频繁实例化然后销毁的对象 2. 创建对象耗时过多或者耗资源过多,但又经常用到的对象 3. 有状态的工具类对象 4. 频繁访问数据库或文件的对象 5. 以及其他要求只有一个对象的场景常用于管理...原创 2020-04-07 19:19:08 · 268 阅读 · 0 评论 -
C++——linux下valgrind工具检测内存泄露和性能分析
1. Valgrind简介官网Valgrind介绍是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。这些工具之中最有名的是Memcheck。它能够识别很多C或者C++程序中内存相关的错误,这些错误会导致程序崩溃或者出现不可预知的行为。1)memcheck:检查程序中的内存问题,如泄漏、越界、非法指针等(本文重点学习)。2)callgrind:检测程序代码的运行时间和调用过程,...原创 2020-03-26 12:54:01 · 1242 阅读 · 0 评论 -
C++——内存泄漏检测工具Visual Leak Detector
1.安装Visual Leak Detector官网下载安装完成后,会自动将其include目录、静态库目录(lib目录)添加到VS的附加库目录,无需手动添加include目录和lib目录。安装完成后在VisualLeakDetector安装目录下找到vld.ini文件,修改ReportTo = both如果在后面测试的时候call stack没有输出信息,则修改Rep...原创 2020-03-25 12:30:37 · 512 阅读 · 0 评论 -
C++——UDP的socket通信
1.UDP流程UDP特点:基于报文、不保证按序发送、一对一,一对多,多对一和多对多的交互通信、不可靠性(容易出现丢包现象)。服务端: 创建socket-->bind-->循环接收/发送数据-->关闭socket客户端:创建socket-->bind(可选)-->循环发送/接收数据-->关闭socket流程图: UDP编程的服务端一般步骤是...原创 2020-03-24 18:21:36 · 7140 阅读 · 2 评论 -
C++——TCP的socket通信
1.TCP流程TCP编程的服务器端一般步骤是: 1、创建一个socket,用函数socket(); 2、设置socket属性,用函数setsockopt(); * 可选 3、绑定IP地址、端口等信息到socket上,用函数bind(); 4、开启监听,用函数listen(); 5、接收客户端上来的连接,用函数accept(); 6、收发数据,用函数send(...原创 2020-03-24 12:41:57 · 1088 阅读 · 0 评论 -
C++——TCP和UDP协议(上)
1.前言OSI七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 口诀: “物数网传会表应”面试中经常问的 TCP 和 UDP(属于传输层协议) 的区别,简单总结如下:TCP 和 UDP 的区别:TCP面向连接(如打电话要先拨号建立连接); UDP是无连接的,即发送数据之前不需要建立连接 UDP程序结构较简单 TCP 是面向字节流的,UDP 是基于...原创 2020-03-23 15:56:40 · 1965 阅读 · 0 评论 -
C++11——std::tuple
std::tuple是一个固定大小的不同类型值的集合,是泛化的std::pair。和c#中的tuple类似,但是比c#中的tuple强大得多。我们也可以把他当做一个通用的结构体来用,不需要创建结构体又获取结构体的特征,在某些情况下可以取代结构体使程序更简洁,直观。样例:// std::tuple class CTuple{public: CTuple() {} ~CTuple(...原创 2020-03-19 17:16:10 · 845 阅读 · 1 评论 -
C++11——std::atomic
std::atomic对int, char, bool等数据结构进行原子性封装,在多线程环境中,对std::atomic对象的访问不会造成竞争-冒险。利用std::atomic可实现数据结构的无锁设计。Atomic.h// std::atomic class CAtomic {public: CAtomic() { m_Foo = 0; } ~CAtomic() {} voi...原创 2020-03-18 17:03:18 · 1494 阅读 · 0 评论 -
C++11——正则表达式
1. 描述C++11支持了正则表达式,主要算法有: regex_match,正则表达式要匹配整个字符串 regex_search,正则表达式可以匹配字符串中的一部分或全部 regex_replace,用一个字符串替换源字符串中匹配正则表达式的那部分子串2. 使用Regex.h#pragma once// 正则表达式class CRegex{public: ...原创 2020-03-17 17:42:33 · 1522 阅读 · 0 评论 -
C++11——计时器
计时器常用来计算某个函数或模块耗时。 auto start = std::chrono::system_clock::now(); int nCnt = 0; for (int i = 1; i < 1000; i++) { nCnt += i; std::this_thread::sleep_for(std::chrono::mill...原创 2020-03-16 14:48:54 · 450 阅读 · 0 评论 -
C++11——获取当前时间
时间格式自定义// 获取当时系统时间const std::string GetCurrentSystemTime(){ auto t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); struct tm* ptm = localtime(&t); char date[60] ...原创 2020-03-16 14:41:40 · 2569 阅读 · 0 评论 -
C++11——可变参数模板
可变模板中,省略号的作用有两个:1.声明一个参数包T... args,这个参数包中可以包含0到任意个模板参数;2.在模板定义的右边,可以将参数包展开成一个一个独立的参数;// std::template 可变参数模板//可变模板中,省略号的作用有两个://1.声明一个参数包T... args,这个参数包中可以包含0到任意个模板参数;//2.在模板定义的右边,可以将参数包展开成一...原创 2020-03-16 14:30:27 · 352 阅读 · 0 评论 -
C++11——条件变量std::condition_variable
std::condition_variable 条件变量可以履行发送者或接收者的角色,作为发送者,它可以通知一个或多个接收者。条件变量允许我们通过通知进而实现线程同步。举例:// std::condition_variable//当 std::condition_variable对象的某个wait 函数被调用的时候,它使用 std::unique_lock(通过 std::mute...原创 2020-03-16 14:21:16 · 340 阅读 · 0 评论 -
C++11——Lambda表达式
1.说明ambda表达式是C++11引入的一个重要特性之一,利用Lambda表达式,可以方便的定义和创建匿名函数。Lambda表达式完整的声明格式如下:[capture list] (params list) mutable exception-> return type { function body }各项具体含义如下:capture list:捕获外部变量列表 p...原创 2020-03-16 13:29:01 · 654 阅读 · 0 评论 -
C++11——std::function和std::bind
std::function 是一种通用的多态函数包装器。std::function 的实例可以存储、复制和调用任何可调用的目标——函数、lambda表达式、绑定表达式或其他函数对象,以及指向成员函数的指针和指向数据成员的指针(统称为“可调用对象”)。基类:Base.h#pragma once// 基类class CBase{public: CBase(){} ~CBase...原创 2020-03-16 11:25:57 · 789 阅读 · 0 评论 -
C++11——生产者、消费者(锁)
工作中有时候会有遇到边生产边消费的异步场景,这里写了一个简单的demo。Mutex.hpp#include <iostream>#include <deque>#include <thread>#include <mutex>std::deque<int> q;std::mutex mu;std::conditio...原创 2020-03-16 10:13:22 · 587 阅读 · 0 评论 -
万能的to_string
// 万能的to_stringtemplate<class T>const std::string to_string(const T& t){ std::ostringstream oss; //创建一个流 oss << t; //把值传递如流中 return oss.str();}...原创 2020-03-13 18:45:22 · 108 阅读 · 0 评论 -
X宏
X宏是汇编语言的一个宏,但很容易转换为C语言宏,工作中小技巧,记录分享大家。头文件: XMacro.h#pragma once#include <stdio.h>// 正常使用// 缺点: 新加入一个颜色,新加入一个颜色,会输出结果错误,或者数组越界enum COLOR_NOR { no_red, no_green, no_blue};static ch...原创 2020-03-13 17:43:49 · 523 阅读 · 0 评论 -
C++11——不定参数模板
不定参数模板,顾名思义。Template.h#pragma once#include <stdarg.h>//标准参数:模拟可变参数必需的头文件template<class Type>class CCTemplate{public: CCTemplate() {} ~CCTemplate() {} void* operator new(siz...原创 2020-03-13 16:16:09 · 4730 阅读 · 0 评论 -
Log4cpp多线程崩溃
log4cpp使用多线程运行几分钟后出现崩溃,网上查找资料,找到解决办法,记录下void OstreamAppender::_append(const LoggingEvent& event) { (*_stream) << _getLayout().format(event); if (!_stream->good()) { ...原创 2019-11-06 17:33:18 · 1436 阅读 · 0 评论