自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 资源 (7)
  • 收藏
  • 关注

原创 c++ libcurl使用(使用类)

libcurl主要功能就是用不同的协议连接和沟通不同的服务器~也就是相当封装了的sockPHP 支持libcurl(允许你用不同的协议连接和沟通不同的服务器)。, libcurl当前支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传(当然你

2017-03-14 16:50:20 4530

原创 线程的基本概念及常见问题

提到线程,就不得不提到进程。一个进程代表计算机中实际运行的一个程序

2023-03-02 16:24:03 136

原创 gdb实用调试技巧

gdb的一些实用调试技巧

2023-03-02 10:59:21 573

原创 使用gdb调试多进程程序

这里说的多进程程序指的是一个进程使用 Linux 系统调用 fork 函数产生的子进程,没有相互关联的进程调试指的是gdb调试单个进程。

2023-03-01 17:13:57 501

原创 使用gdb调试多线程程序

使用gdb调试多线程程序

2023-03-01 16:44:39 890

原创 gdb常用命令详解

gdb中一些常用命令的基础用法

2023-03-01 15:00:49 2866

原创 gdb调试

调试是开发过程中不可或缺的工作,在Linux编程中通常使用gdb来调试C/C++程序。

2023-03-01 10:48:05 186

原创 makefile与CMake

我们在Windows机器上编译和调试C/C++程序时可以使用Visual Studio,在Linux机器上编译 C/C++程序时最终使用的是 gcc/g++,当然,在调试时使用gdb。我们一般使用makefile文件组织大型C/C++或者含有多个C/C++文件的项目,有人认为makefile不太方便,于是发明了CMake。

2023-03-01 10:17:21 1542

原创 stl中的智能指针类详解

C/C++最为人诟病的是内存泄露问题,后来的大多数语言都内置了内存分配与释放功能,有的甚至对语言的使用者屏蔽了内存指针这一概念。这里对此不置褒贬,手动分配与释放内存有利有弊,自动分配与释放内存亦如此,这是两种不同的设计哲学。

2023-02-27 15:08:19 531

原创 stl容器新增的实用方法

因为std::map中元素的key是唯一的,所以在实际开发中经常会有这样一类需求:向某个 map中插入元素时需要先检测 map中指定的 key是否存在,不存在时做插入操作,存在时直接取来使用;或者在指定的key不存在时做插入操作,存在时做更新操作。在C++17中,map提供了一个try_emplace方法,该方法会检测指定的key是否存在,如果存在,则什么也不做。std::map的try_emplace方法与insert_or_assign方法。原位构造与容器的emplace系列函数。

2023-02-13 17:37:03 66

原创 Range-based循环语法

因此,在上面例子的老式语法中,iter是一个指针类型(std::pair*),使用 iter->second 去引用键值;而在for-each 语法中,iter 与容器中元素的数据类型(std::pair)相同,因此使用iter.second可直接引用键值。◎ 在 for-each 语法中,对于复杂的数据类型,迭代器是原始数据的拷贝,而不是原始数据的引用。

2023-02-13 17:19:37 72

原创 Range-based循环语法

◎ for-each中的迭代器类型与数组或集合中元素的类型完全一致,而原来使用老式语法迭代 stl容器(如 std::map)时,迭代器 iter的类型是 stl容器中元素的指针类型。在这个循环中,begin-expr返回的迭代子__begin 需要支持自增操作,且每次循环时都会与end-expr返回的迭代子__end做判不等比较,在循环内部通过调用迭代子的解引用(*)操作取得实际的元素。◎ 在 for-each 语法中,对于复杂的数据类型,迭代器是原始数据的拷贝,而不是原始数据的引用。

2023-02-13 16:29:06 308

原创 final、override关键字和=default、=delete语法

final、override关键字和=default、=delete语法

2023-02-13 16:00:42 122

原创 C++17注解标签(attributes)

在C++98/03时代,不同的编译器使用不同的注解为代码增加了一些额外的说明,读者可能在各种C/C++代码中见过#pragma、__declspec、__attribute等注解。然而,不同的编译器对于同一功能可能使用不同的注解,导致我们需要为不同的编译器编写不同的注解代码。从C++11开始,新的语言标准统一制定了一些常用的注解标签

2023-02-13 15:10:56 238

原创 统一的类成员初始化语法与std::initializer_list<T>

统一的类成员初始化语法与std::initializer_list<T>

2023-02-13 14:47:43 167

原创 pimpl惯用法

在日常开发中,类的public方法提供了对外接口供第三方使用,每个函数的具体实现都在XXX.cpp里,对第三方不可见。对于提供给第三方的库,库作者一般需要提供.h文件给使用者。提供像XXX.h这样的头文件给第三方使用时, .h文件中类的大量成员变量和私有函数都暴露了这个类的太多实现细节,很容易让使用者看出其实现原理。

2023-02-08 14:21:22 387

原创 C++RAII惯用法

RAII(Resource Acquisition Is Initialization,资源获取就是初始化)

2023-02-08 14:01:15 97

原创 c++智能指针

c++智能指针

2022-08-22 15:12:19 370

原创 算法总结归纳(二)

注:题目来源力扣https://leetcode-cn.com/5、链表专题链表(Linked List) 是一种常见的基础数据结构, 是一种线性表, 但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer) 。由于不必须按顺序存储, 链表在插入的时候可以达到 O(1)O(1) 的复杂度, 比另一种线性表—— 顺序表快得多, 但是查找一个节点或者访问特定编号的节点则需要 O(n)O(n) 的时间, 而顺序表相应的时间复杂度分别是 O...

2022-04-20 09:31:32 456

原创 算法总结归纳(一)

1、动态规划专题动态规划(英语:Dynamic programming, 简称 DP) 是一种在数学、管理科学、 计算机科学、 经济学和生物信息学中使用的, 通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题, 动态规划方法所耗时间往往远少于朴素解法。动态规划背后的基本思想非常简单。 大致上, 若要解一个给定问题, 我们需要解其不同部分(即子问题) , 再根据子问题的解以得出原问题的解。...

2022-03-10 11:03:15 707

原创 Lua协程整理

协程跟线程都代表一个执行序列。不同的是,协程把线程中不确定的地方尽可能的去掉,执行序列间的切换不再由CPU隐藏的进行,而是由程序显式的进行。 所以,使用协程实现并发,需要多个协程彼此协作。 基本语法: coroutine.create (f)  传一个函数参数,用来创建协程。返回一个“thread”对象。 coroutine.isyieldable ()  如果正在运行的协程可以让出,则返回真。值得注意的是,只有主协程(线程...

2022-02-28 17:10:19 242

原创 C++内存分配方式

内存分配方式有三种:1、从静态存储区域分配。内存在程序编译的时候已经分配好了。这些内存在程序整个运行期间都存在,如全局变量,static变量等2、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。如数组,局部变量,形参。3、从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delet...

2022-01-15 11:49:56 2509 1

原创 Makefile模板

1.生成.o文件EXECUTABLE:= project_nameLIBDIR:=LIBS:=INCLUDES:=SRCDIR:=CC:=g++CFLAGS:= -g -Wall -O0 -static -static-libgcc -static-libstdc++CPPFLAGS:= $(CFLAGS)CPPFLAGS+= $(addprefix -I,$(INCLUDES))CPPFLAGS+= -I.CPPFLAGS+= -MMDRM-F:= rm -f...

2021-11-17 15:55:13 242

原创 C++11常用新特性

nullptr 出现的目的是为了替代 NULL。在某种意义上来说,传统 C++ 会把 NULL、0 视为同一种东西,这取决于编译器如何定义 NULL,有些编译器会将 NULL 定义为 ((void*)0),有些则会直接将其定义为 0。C++ 不允许直接将 void * 隐式转换到其他类型,但如果 NULL 被定义为 ((void*)0),那么当编译char *ch = NULL;时,NULL 只好被定义为 0。而这依然会产生问题,将导致了 C++ 中重载特性会发生混乱,考虑:void fo

2021-11-04 10:34:24 885

原创 设计模式

单例模式这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:优点:缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。使用场景:注意事项:getInstance() 方法中需要使用同步锁 synchronized (Singleton.class

2021-11-04 10:21:53 90

原创 C/C++语言各数据类型大小和取值范围

位、字节和字是描述计算机数据单元或存储单元的术语。这里主要指存储单元。最小的存储单元是位(bit),可以存储0或1(或者说,位用于设置“开”或“关”)。虽然1位存储的信息有限,但是计算机中位的数量十分庞大。位是计算机内存的基本构建块。字节(byte)是常用的计算机存储单位。对于几乎所有的机器,1字节均为8位。这是字节的标准定义,至少在衡量存储单位时是这样。既然1位可以表示0或1,那么8位字节就有256(2的8次方)种可能的0、1的组合。通过二进制编码(仅...

2021-09-27 09:18:57 560

原创 Lua class剖析

_setmetatableindex = function(t, index) if type(t) == "userdata" then local peer = tolua.getpeer(t) if not peer then peer = {} tolua.setpeer(t, peer) end _setmetatableindex(peer, index) els...

2021-09-09 11:19:47 308

原创 STL 之sort排序

STL的sort()算法,数据量大时采用Quick Sort,分段递归排序,一旦分段后的数据量小于某个门槛,为避免Quick Sort的递归调用带来过大的额外负荷,就改用Insertion Sort。如果递归层次过深,还会改用Heap Sort。以上三种算法的综合称为– Introspective Sorting(内省式排序)。Insertion Sort基本原理是:将初始序列的第一个元素作为一个有序序列,然后将剩下的N-1个元素按关键字大小依次插入序列,并一直保持...

2021-09-08 11:10:03 499

原创 STL之迭代器

迭代器(iterator)是一种抽象的设计理念,通过迭代器可以在不了解容器内部原理的情况下遍历容器。除此之外,STL中迭代器一个最重要的作用就是作为容器(vector,list等)与STL算法的粘结剂,只要容器提供迭代器的接口,同一套算法代码可以利用在完全不同的容器中,这是抽象思想的经典应用。各个迭代器的功能如下:迭代器的操作:只有顺序容器和关联容器支持迭代器遍历,各容器支持的迭代器的类别如下:...

2021-09-07 09:18:11 118

原创 理解红黑树

1. 二叉树二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。即二叉树满足以下两个条件:1) 本身是有序树(若将树中每个结点的各子树看成是从左到右有次序的(即不能互换),则称该树为有序树(Ordered Tree))。2) 树中包含的各个...

2021-09-06 16:02:16 101

原创 STL之容器

STL容器就是将运用最广泛的一些数据结构实现出来。容器用来管理某类对象。常用的数据结构:数组(array) , 链表(list), tree(树),栈(stack), 队列(queue), 集合(set),映射表(map), 根据数据在容器中的排列特性,这些数据分为序列式容器和关联式容器两种。1、顺序容器顺序容器有以下三种:可变长动态数组 vector、双端队列 deque、双向链表 list。它们之所以被称为顺序容器,是因为元素在容器中的位置同元素的...

2021-09-06 14:15:54 201

原创 STL总结

1、什么是STL?STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念...

2021-09-06 09:06:18 94

原创 Lua游戏开发时区问题

在国内游戏开发的过程中经常会忽略时区的问题,从而导致一些玩家移动端时区设置不是UTC-8出现一些问题。1.如何保证游戏内全部统一为服务器的时间呢function getTimeZone()local now = os.time()return os.difftime(now, os.time(os.date("!*t", now)))endos.date("!*t", now),其中以!为关键。“!*t” 得到的是一个 UTC 时间,为0度的经线(子午线)北...

2021-07-13 16:53:02 633

原创 微信转跳相关

cocos2d-x根据url对应的地址,调用微信内的路由组件进行跳转。cc.Application:getInstance():openURL("weixin://");cc.Application:getInstance():openURL("weixin://dl/stickers");cc.Application:getInstance():openURL("weixin://dl/games");cc.Application:getInstance():openURL("weixin:/.

2020-05-23 14:24:37 907

原创 cocos2d-x分帧加载资源

function GameApp:updateLoadRes() local PLIST_FILE = { "ShuangSheng/plist/beforeGameAni.plist", "ShuangSheng/plist/item.plist", "ShuangSheng/plist/addsub_ani.plist", ...

2020-03-26 14:18:59 661

原创 XManager安装配置

一、简介 Xmanager,可以将PC变成X Windows工作站(非开源)。Xmanager是Windows 95/98/ME和Windows NT/2000/XP /2003平台下一个性能优秀的X11R6 PC X服务器。就像运行在PC上的任何Windows应用程序一样,它可以无缝拼接到UNIX 应用程序中。在UNIX/Linux和Windows网络环境中,Xmanager 是...

2019-10-16 18:51:33 2907

转载 利用ACE日志策略进行日志运行时配置管理

为什么要使用ACE日志策略? 因为使用ACE日志策略可以使我们以配置的方式对日志输出进行管理更为重要的是,其利用配置参数可以控制日志输出中的各种问题, 如:可以配置当应用的日志文件到达指定尺寸是,它能够换用新的日志文件 也可也配置要保留的文件最大数目。 总之,用上ACE日志策略,很多麻烦的事情你都不用管了。怎么使用ACE日志策略? 使用很简单,你只需建立一个配置文件,然...

2019-10-16 16:48:44 196

原创 利用ACE实现看门狗(守护进程)

主要原理:被守护进程B由看门进程A启动(通过B的进程名字B.exe),在启动之后注册进程的退出事件,当B退出时,A捕获退出事件,调用回调函数F,F会再次启动一次B。Process_Manager_Class.h#pragma once//CProcessManager.h#include <stdio.h>#include <stdlib.h>#inclu...

2019-10-16 16:44:19 290

原创 一个基于ACE的C/S服务程序实例

使用ACE进行C/S结构程序,就是使用Reactor框架,实现我们的事件处理方法。下面是一个使用ACE开发的通信系统的简单的类图:其中我们需要开发的部分主要就是Server_svc_handler和Client_svc_handler,这两个对象都是继承自ACE_svc_handler。用来处理建立(接受)连接,以及进行数据的通信和处理。Server_acceptor是用于在服务器上接受...

2019-10-16 16:37:49 248

原创 ACE可以做什么

首先来了解一下ACE框架,下面是ACE的体系结构图:这个图中,可以很明显的看出,ACE框架从底层往上,依次是C风格的OS适配层,也就是对不同的操作系统底层调用的封装;上一层是C++的封装类,就是把各种系统调用和系统对象封装成C++类对象;再往上就是框架层,主要就是Reactor, Acceptor, Connector和Proactor。在上面就是ACE提供的一些服务组件。...

2019-10-16 16:18:58 545

combox tip

combox tip

2016-10-14

Zip压缩与解压缩

zip压缩,解压缩

2016-10-11

c++树状控件双击修改节点名称

c++树状控件双击修改节点名称

2016-10-11

ReNameFile

给指定文件夹下文件或文件夹名称带全角半角符号的装换

2015-11-13

XFont_demo

通过输入系统字体名称来获取ttf文件名称(注;中文字体名称获取不到)

2015-11-13

枚举系统字体名称,显示网页图片

枚举系统字体名称,显示网页图片.

2015-11-12

libharu windows平台

vc环境下用于输出pdf文档的一款开源库,已经编译成功

2015-10-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除