
C++
文章平均质量分 64
Diamond-Mine
个人公众号《后台开发探索之旅》
展开
-
全排列 & 任意排列 & 任意组合 & 笛卡尔积 算法
排列和组合的区别:排列:要求顺序,比如 [1,2] 和 [2,1] 是两个不同的排列 组合:不要求顺序,比如 [1,2] 和 [2,1] 是两个相同的组合全排列:给定n个数,返回长度为n的所有排列 比如 [1,2,3] 的全排列是[[1 2 3] [1 3 2] [2 1 3] [2 3 1] [3 1 2] [3 2 1]] 可采用回溯法,遍历n叉树,得到所有路径任意长度的排列:给定n个数,返回任意长度的所有排列 比如 [1,2,3] 的任意长度的排列是[[1] [1 2] [..原创 2021-04-06 11:39:38 · 1930 阅读 · 0 评论 -
C++使用libcurl+zlib解压http gzip数据
开发背景在android ndk环境下使用libcurl发起http请求,不巧的是,当前使用的libcurl编译时没有包含zlib模块,导致无法解压gzip数据。考虑到ndk自带zlib包,可以使用zlib手动解压gzip数据,避免再次编译libcurl。源码实现(1)使用zlib解压gz数据int gzDecompress(const char *src, int srcL...原创 2019-12-12 18:39:27 · 2006 阅读 · 2 评论 -
多线程示例代码
#include "stdafx.h"void* thread1(void* arg); // 线程函数void* thread2(void* arg);void* thread3(void* arg);pthread_mutex_t gLock; // 线程锁pthread_cond_t gCond; // 条件变量volatile bool gStop; // 运原创 2012-08-21 16:18:21 · 664 阅读 · 0 评论 -
Windows多线程示例代码
// thread.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include #include #include using namespace std;// 线程函数unsigned int __stdcall thread1(LPVOID原创 2012-08-21 20:30:32 · 760 阅读 · 0 评论 -
vc2005加速方法
选择菜单“工具”-》“选项”,英文为“Tool”-》“Options”【1】“Environment”(1)取消选中“Animate Environment tools”,关闭动画效果(2)选择子项“Startup”,在at startup设置里选择“Show empty Environment”,取消选中“Download content every”【2】Tex原创 2012-08-24 19:15:10 · 483 阅读 · 0 评论 -
C++显示调用函数和行号文件名
void fun1(){ printf("调用函数 %s, %u行 \n", __FUNCTION__, __LINE__);}void fun2(){ printf("调用函数 %s, %u行 \n", __FUNCTION__, __LINE__);}int _tmain(int argc, _TCHAR* argv[]){ printf("exe编译时间:%s, %s原创 2012-09-04 16:30:04 · 2315 阅读 · 0 评论 -
float丢失精度的问题
一直以为丢失精度是丢失小数点后的值,其实不是,小数点前的值也会丢失,比如下面的代码, int a = 1234567890; float b = (float)a; int c = (int)b;将int转为float,再转回int,数据就不对了。a = 1234567890b = 1.23457e+009c = 1234567936原创 2013-01-24 20:22:07 · 1268 阅读 · 0 评论 -
跨平台C++服务器程序开发 (1)了解跨平台开发
跨平台服务器程序的作用所谓跨平台,主要指Windows和Linux两个主要平台。如今绝大多数服务器后端程序运行在Linux平台,这是因为Linux具有免费、开源、远程操控方便、易于大规模运维管理等优点,相比之下,Windows平台更适用于个人用户的办公和娱乐,因此服务器程序多数要在Linux平台上运行。但是在开发过程中,大部分开发者更习惯使用Windows平台的Visual Studio(简称VS)原创 2016-03-01 12:53:00 · 3089 阅读 · 0 评论 -
小试牛刀-递归下降算法(1)
欢迎关注公众号《后台开发探索之旅》。递归下降分析是语法分析里的一个常用算法,具体理论可参考编译原理相关资料。这里介绍一个用递归下降算法分析数学表达式的实例,比如计算下面表达式的值:10*20/(5+2*5)-10+20在python命令行里我们可以轻松执行命令:print 10*20/(5+2*5)-10+20得到计算结果=23,但要自己实现这个功能该怎...原创 2017-11-03 17:17:14 · 3152 阅读 · 0 评论 -
windows 模拟键盘消息(支持非焦点窗口)
焦点窗口可以用SendInput 发送模拟消息,对于非焦点窗口可以用PostMessage 向指定窗口发送模拟消息。假设窗口名称为"Trigger Rally", 模拟发送左方向按键(VK_LEFT)。代码如下:void keyPressed(const char* windowName, int keyVirtualCode, bool isPressed) { WO...原创 2019-07-29 16:57:36 · 3156 阅读 · 0 评论 -
tesla k80显卡 配置支持opengl
系统:Window7显卡型号:tesla k80目标: 支持运行opengl程序k80在安装nvidia显卡驱动后,默认运行在TCC纯计算模式,不支持opengl。事实上k80支持TCC和WDDM两种模式,在WDDM模式下支持opengl。配置方法:(1)以管理员模式打开Windows命令行(2)进入C:\Program Files\NVIDIA Corpor...原创 2019-07-29 17:14:13 · 11922 阅读 · 4 评论 -
msys2环境下解决cmake编译报错
在msys2环境下使用cmake编译32位的开源库时,执行cmake或make时报错,cmake是独立安装的,经过仔细排查(打印命令执行时的调试信息),发现cmake错误的使用的64位的gcc版本。这个问题可以通过显式指定cmake使用的gcc和g++程序解决,执行命令如下:cmake \ -DCMAKE_BUILD_TYPE="Release" \ -DCMAKE_CX...原创 2019-08-07 16:27:38 · 3448 阅读 · 0 评论 -
windows 监控进程-自动拉起脚本
需求:监控进程 myprog.exe 是否正常运行,若未启动,启动 myprog.exe; 每隔10秒检测一次windows bat脚本代码如下:set cxmc=myprog.exe:START_CHECKtasklist | findstr "%cxmc%" || goto STARTPRO@echo process is runningping -n 10 127....原创 2019-08-12 10:49:03 · 5461 阅读 · 10 评论 -
修改日期导致代码每次都重新编译的问题
当有多个人共用一台机器时,一般是大型服务器,若有其中一个人把时间date往后改了,比如今天是20号,他把时间改到22号了,那么你再编译文件main.cpp时,生成的main.o文件就是22号的。(问题1):当他再把时间改回到20号的时候,你又修改了main.cpp文件想重新编译,可是文件修改时间是20号,而.o文件是22号,编译器就忽略该修改,不编译修改的文件。(问题2):原创 2012-08-16 16:58:57 · 1564 阅读 · 0 评论 -
Visual Studio 自动添加函数注释宏
在.net环境下,按下三个/// 就可以自动添加函数注释,包括函数名、参数列表、返回值等信息。在C++环境下通过MACRO宏也可以实现这个功能,宏代码如下:Option Strict OffOption Explicit OffImports EnvDTEImports System.DiagnosticsPublic Module Comment Sub FI原创 2012-07-26 09:51:05 · 3425 阅读 · 0 评论 -
C#调用C++ DLL类方法
C++的优势在于高效灵活,C#的优势在于简单易用,两者结合起来对项目开发来说是件好事,而且C++不容易反编译,也保障了代码的安全性,如果一些核心算法使用C#编写,那么保密就是一个问题。 C++生成的DLL一般只提供函数接口,不能直接用C#调用C++写的类,这样非常不方便,于是经过半天的反复测试,终于确定了一套可行的方案,下面就是整个流程的一个范例。(1)编写C++原创 2012-07-03 23:25:45 · 15465 阅读 · 12 评论 -
游戏做任务的基本流程
一般的任务流程如下:(1)看到npc头顶有个叹号,表示有可接任务。点击npc,打开对话窗口,点击接取任务。(2)接取任务后,在任务跟踪窗口显示任务计数,比如消灭野猪5个,当前计数为“0/5”。(3)选中野猪,进入攻击状态,野猪持续掉血,直至死亡。(4)消灭一只野猪后,计数加1,如“1/5”。(5)消灭五只野猪后,任务完成,任务跟踪显示“消灭野猪5个(已完成)原创 2012-07-03 23:44:51 · 1876 阅读 · 0 评论 -
TrinityCore 魔兽世界私服11159 完整配置
为什么要研究TrinityCore ? (1)它是一个完整成熟的可运行调试的网游服务器框架。(2)它是一个跨平台的标准C++编写的项目,在Windows、Linux、MacOSX上都可编译运行。(3)它使用了ACE、OpenSSL、Socket Library等开源库。(4)代码质量高,适合于进阶C++高级程序员学习。引言: 在2005年魔兽世界正流行时,有一批牛人基于官方原创 2012-06-26 11:52:32 · 16463 阅读 · 3 评论 -
C++获取外部exe程序的返回值
在自己的C++控制台程序里调用外部的7za.exe命令行工具,需要得到7za的返回值,以确定解压缩是否成功。7-Zip 返回以下退出代码:代码 含义 0 没有错误 1 警告(非严重错误)。比如一个或多个文件被其他程序锁定,它们将不会被压缩。 2 严重原创 2012-07-03 23:09:30 · 9045 阅读 · 0 评论 -
C++位运算设置指定位为0或1
设置第3位为0void RemoveBitValue(int& value, int index){int bit = 1 << index;int nMark = 0;nMark = (~nMark) ^ bit;value &= nMark;}int val = 63; // 111111RemoveBitValue(val, 3); // 1原创 2012-07-03 23:12:52 · 9918 阅读 · 1 评论 -
C++读取网络url文件内容
文件地址为“http://www.baidu.com/xxx.txt”// readTxt.cpp :Defines the entry point for the console application.// #include "stdafx.h"#include #include #include using namespace std;#pragma comment(li原创 2012-07-03 23:15:46 · 11170 阅读 · 4 评论 -
魔兽私服TrinityCore 运行调试流程
配置参见上一篇:TrinityCore 魔兽世界私服11159 完整配置(1)启动Web服务器打开TC2_Web_Mysql目录,运行“启动Web服务器.exe”自动弹出帐号注册界面,并启动Apache.exe、mysqld-nt.exe等后台服务器进程(2)启动登录服务器打开Trinity_Core_2目录,运行“Trini原创 2012-07-01 00:03:37 · 14440 阅读 · 0 评论 -
C++读写Tga文件
// tga.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include #include using namespace std;#define RGB2INT(r,g,b) (r*256*256 + g*256 + b)void SaveT原创 2012-07-07 10:13:19 · 3522 阅读 · 2 评论 -
C++计算星期
/********************************************************************************函数名称:int GetWeekday(int y, int m, int d)功能描述:根据给定日期,计算该天的星期值入口参数:@y - 年,@m - 月,@d - 日出口参数:返 回 值:0 - 星期天,1 ~ 6 - 星期转载 2012-07-09 20:59:47 · 1838 阅读 · 0 评论 -
C++ 技术知识点 (1)
内存对齐#pragma pack(push,1)VC中提供了#pragma pack(n)来设定变量以n字节对齐方式。如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。字符数组清0char name[12] = {0}; 或 memset(name, 0, 12);若不清零,字符数组内为随机值,可能导致字符串编码问题,一定要先清原创 2012-07-01 09:30:29 · 1874 阅读 · 0 评论 -
vector连续删除元素
vector vecStr; vecStr.push_back("aaa"); vecStr.push_back("bbb"); vecStr.push_back("ccc"); vecStr.push_back("bbb"); vecStr.push_back("eee"); vector::iterator iter = vecStr.begin(); while (iter原创 2012-07-18 19:36:41 · 1273 阅读 · 0 评论 -
gdb自动attach指定进程
新建一个shell脚本文件名为attach.sh,文件内容如下:#!/bin/shpid=`ps -u 用户名 | grep 进程名 | cut -b1-5`gdb -p $pid假如用户名为abc,进程名为server#!/bin/shpid=`ps -u abc | grep server | cut -b1-5`gdb -p $pid也可以用参数设置进程名#!/b原创 2012-07-24 19:00:21 · 1845 阅读 · 0 评论 -
用Visual Studio编辑Linux代码
估计很多人都是用惯了Visual Studio的主,怎么也不适应Linux的一套编辑器,比如vim、source insight这些东西,可视化的eclipse效果还好点,但一般以远程共享一台Linux服务器为主,没那么好条件一人一个Linux机器。我用了有几个月的insight,也就看看代码,反正个人感觉就是别扭,现在换成用VS编辑代码,感觉爽多了。大致方法如下:(1)从原创 2012-07-03 23:48:17 · 5995 阅读 · 1 评论