C/C++、STL等相关技术
若水微韧
专注于3d游戏开发,专注于C++11、STL、win32、mfc、OpenGL编程,开发属于自己3D的游戏
展开
-
qt c++删除文件夹下旧的文件或文件夹
根据读取到的指定文件夹路径进行对文件夹按照时间排序删除比较旧的文件夹,并按照设定的最大文件夹数量执行删除操作#ifndef FILE_MANAGER_H#define FILE_MANAGER_H#include <QObject>#include <QList>#include <QFileInfo>#include "common_ext_global.h"/** 文件夹处理,指定路径下的旧的文件夹删除操作*/class COMMON_原创 2021-12-21 14:08:08 · 1900 阅读 · 0 评论 -
C++逐行解析Txt文本文件,并将相应的字符串转换为double等类型
直接上代码// ReadTxt.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include<iostream>#include <vector>#include <fstream>#include <sstream>#include <string>using namespace std;struct CoordinateData{ //double x, y, z, a, b, c原创 2021-05-28 13:51:01 · 1029 阅读 · 0 评论 -
结构体获取成员偏移值、结构体内存中字节对齐问题
// StructOffset.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #define STRUCTOFFSECT(struct,member) ((size_t)&((struct*)NULL)->member)struct MyStruct{原创 2017-02-21 15:22:47 · 646 阅读 · 0 评论 -
Unreal Engine4 UE4中的字符串转换FString to FName Int32 Float
字符转转化FString to FNamestd::string to FStringFString and FCString OverviewFString to IntegerFString to FloatFloat/Integer to FStringUE4 C++ Source Header ReferencesAll the header files转载 2017-02-09 16:55:26 · 8677 阅读 · 0 评论 -
ue4 中KismetProceduralMeshLibrary SliceProceduralMesh的原理
代码:void UKismetProceduralMeshLibrary::SliceProceduralMesh(UProceduralMeshComponent* InProcMesh, FVector PlanePosition, FVector PlaneNormal, bool bCreateOtherHalf, UProceduralMeshComponent*& OutOtherHa翻译 2017-02-16 14:48:22 · 2226 阅读 · 1 评论 -
C++11中的委派构造函数
C++11中的委派构造函数:与继承构造函数类似。委托构造函数也是c++11中对c++的构造函数的一项改进,其目的就是减少程序员写构造函数的时间。通过委派其他构造函数,多构造函数的类编写起来就很简单容易。比如:原来很冗余的代码// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include us原创 2016-11-05 16:04:59 · 1002 阅读 · 0 评论 -
C++ public protected private成员访问权限解读
C++ public protected private成员访问权限解读三种访问权限public:可以被任意实体访问protected:只允许子类及本类的成员函数访问private:只允许本类的成员函数访问三种继承方式public 继承protect 继承private 继承组合结果基类中 继承方式 子类中原创 2016-04-21 21:50:23 · 1614 阅读 · 0 评论 -
c++返回指针的函数应用于求素数的实例
函数体内,return语句的表达式的值必须是地址值这是c++返回指针的函数关键比如求素数的例子// test.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include using namespace std;int k;int* prime原创 2016-04-29 18:11:05 · 754 阅读 · 0 评论 -
C语言中动态申请连续的二维数组
可以采用多申请一些指针,然后这一些指针分别指向后面数据区中对应的位置,如一个3*4的int类型数组,我们先申请大小为sizeof(int*) * 3 + 3 * 4 * sizeof(int)的一维数组设为arr。然后arr[0]存放指向arr + sizeof(int*) * 3这个位置的指针,arr[1]存放指向arr + sizeof(int*) * 3 + 4 * sizeof(int原创 2016-03-12 10:28:42 · 2122 阅读 · 1 评论 -
写出float a与0比较语句 在这里不能用==或!=来比较
float a与0比较不能用==或!=来比较,/无论是float还是double类型的变量,都有精度限制。//所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“=或const float EPSINON = 0.000001; if ((x >= - EPSINON) && (x 此外:double和float的EPSINON是不同的。原创 2015-11-01 21:32:20 · 3255 阅读 · 0 评论 -
基于对话框MFC按Enter键或者Ese退出的解决方法
基于对话框MFC按Enter键或者Ese退出的解决方法今天在用VC++6.0写数据库软件时。偶然发现单击回车键enter时,程序会突然退出。并且窗口开始时的默认确定按钮已经被我删除了,所以必要的措施必然做出,VC MFC 屏蔽ESC和ENTER键关闭对话框解决途径:在你的C...Dlg.h文件中添加重载函数PreTranslateMessage(MSG* pMsg)原创 2015-11-17 17:04:37 · 6023 阅读 · 0 评论 -
__FUNCTION__返回函数名的宏定义
为了获取函数名,就在函数体中嵌入硬编码的字符串,这种方法单调乏味还易导致错误,不如看一下怎样使用新的C99特性,在程序运行时获取函数名吧。 对象反射库、调试工具及代码分析器,经常会需要在运行时访问函数的名称,直到不久前,唯一能完成此项任务并且可移植的方法,是手工在函数体内嵌入一个带有该函数名的硬编码字符串,不必说,这种方法非常单调无奇,并且轻易导致错误。本文将要演示怎样使用新的C原创 2015-11-01 19:35:13 · 11000 阅读 · 0 评论 -
windows下获得一个指定文件路径下的所有文件
windows下获得一个指定文件路径下的所有文件// GetAllFiles.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include #include #include #include #ifdef WIN32#include #include #endifusing namespac原创 2017-03-12 18:05:59 · 1266 阅读 · 1 评论 -
类对象引用计数使用模板实现(奇特的递归模板模式)
有时候我们需要跟踪一个类的对象个数,又不想为每一个类去实现引用计数,我们可以使用继承思维去实现这一目标。#include "stdafx.h"#include using namespace std; class Counted {private: static int count;public: Counted() { ++count; } Counted(cons原创 2017-04-16 11:42:40 · 610 阅读 · 0 评论 -
qt翻译发布管理器--lupdate和lrelease
发布管理器提供了两个工具,lupdate和lrelease。这些工具依赖于qmake项目文件。尽管你不必使用qmake。Qt项目文件lupdate和lrelease依赖于应用程序的.proQt项目文件。在项目文件中必须有除了本地语言的之外的附加语言的TRANSLATIONS部分。一个比较有代表性的条目就像这样: TRANSLATIONS = tt2_fr.ts \ ...翻译 2019-02-20 11:36:40 · 2163 阅读 · 0 评论 -
char[] 转换为 const QString乱码
char buf[4096]; std::string str(buf);const QString& result = QString::fromLocal8Bit(str.c_str());原创 2019-02-18 10:24:55 · 1032 阅读 · 0 评论 -
qt中的中文路径读取失败解决问题 const char * ->QString
const char *pStr = "QT中文路径的问题";QString fileName = QString::fromLocal8Bit(pStr);原创 2018-05-04 10:19:55 · 1226 阅读 · 0 评论 -
程序员应该思索的那些事
程序员每天该做的事 1、总结自己一天任务的完成情况 最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多 2、考虑自己明天应该做的主要工作 把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作 3、考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法 出错不要紧,最重要的是不要重复犯相同翻译 2018-02-03 00:35:40 · 527 阅读 · 1 评论 -
德罗内三角形剖分生成以及opengl显示
Delaunay 三角网的优点是结构良好, 数据结构简单, 数据冗余度小, 存储效率高, 与不规则的地面特征和谐一致,可以表示线性特征和迭加任意形状的区域边界, 易于更新,可适应各种分布密度的数据等; 它的局限性是, 算法实现比较复杂和困难, 但现在已经有了较多成熟的实现算法。 Delaunay 三角网是Voronoi图的伴生图形, 它们两个是被普遍接受和采用的分析研究区域离散数据的有力工具。它是原创 2017-12-06 22:13:25 · 1294 阅读 · 0 评论 -
const std::string转换为const wchar_t* string
由const std::string转换为const wchar_t* stringc++代码:const std::string text = "汉语";std::wstring szDst; { int len = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)text.c_str(), -1, NULL, 0); wchar_t原创 2017-11-24 15:13:09 · 3780 阅读 · 0 评论 -
c++11多线程编程参数传递若干问题
随着计算机处理器多核的出现,程序员编写多线程的需求越来越大。当处理互相独立的任务时,我们可以更好的使用多核的多线程的效率,可以很大的提高运行速度,但是有时候提高的速度并不是成倍的提高,因为有的操作系统访问数据的命中率可能会降低,因为当操作系统切换线程的时候,我们访问的数据会有较大的差别。因此,多线程并不一定能够成倍提高运行速度。在c++11编程中,我们使用多线程的方法非常的简单,如果我们处理的任务原创 2017-11-30 17:19:30 · 1971 阅读 · 0 评论 -
快速排序
快速排序效率较高,采用分治策略,平均时间nlogn主要使用了递归算法和子数组划分,关键之处在于子数组的划分问题上,由于在原址上进行数据的修改,不必合并子数组直接上代码:// QuickSort.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #define NUM 10int ParticalSort(int a[],原创 2017-11-28 21:31:24 · 349 阅读 · 0 评论 -
OpenGL天空贴图以及反射纹理映射即镜面反射
编程中一个好的天空贴图会给玩家带来舒适的感觉,还有那对周围物体的反射光映射到球、等物体上或许是一个特别愉悦的事件,然而这在opengl里实现又不太难,请看下面的代码:#include #include #define GLUT_DISABLE_ATEXIT_HACK#include #include #include // 摄像机参数static float cameraTh原创 2015-10-31 21:15:14 · 4752 阅读 · 1 评论 -
两个数间的交换(按位操作不用中间变量temp即可实现两个数据的交换)C++按位与运算交换数据vs2013环境
两个数间的交换(按位操作)C++按位与运算交换数据vs2013环境不用中间变量temp即可实现两个数据的交换#includeusing namespace std;void swap(int *a, int *b);int main(){ /////////////////////////////////////////////////// //异或运算符是可以逆运算的可以使原创 2015-10-30 11:32:31 · 1227 阅读 · 0 评论 -
#define M(row,col) m[col*4+row]宏定义代码全解
#define宏定义解释:对于宏定义来说熟悉编程语言的爱好者都不会感到陌生,其实宏定义的用处很多宏定义是C语言提供的预处理功能,其简单格式为#define 标识符 字符串,掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。即在对相关命令或语句的含义和功能作具体分析之前就要换。#define M(row,col) m[col*4+原创 2015-10-24 12:54:22 · 1522 阅读 · 0 评论 -
媒体库管理系统即图书馆管理系统设计
媒体库管理系统即图书馆管理系统设计 《基于C++的面向对象程序设计实验报告》 题目:图书馆管理系统设计学院:系别:计算机工程系专业:计算机科学与技术制作人:学号:132054137班级:1320541 2014年7月1原创 2015-10-21 19:48:20 · 9018 阅读 · 3 评论 -
视图模型转换矩阵的推导也是关于gluLookAt函数即视图转换矩阵的推导及代码实现
关于gluLookAt函数即视图转换矩阵的推导及代码实现视图模型转换矩阵的推导也是关于gluLookAt函数即视图转换矩阵的推导及代码实现 gluLookAt函数提供给用户完成模式变换(model-view transformation)中,在将模型坐标系转换都世界坐标系后,进行世界坐标系到照相机坐标系的转换。实际上,照相机的定位也是在世界坐标系下定义的,这里的转换,可以理解为:原创 2015-11-06 23:45:43 · 4816 阅读 · 0 评论 -
OpenGL模型视图变换、投影变换、视口变换总结
产生目标场景的过程类似于用照相机进行拍照:(1)把照相机固定在三角架上,并让他对准场景 从不同位置观察场景(视图变换)(2)对场景进行安排,使各个物体在照片中的位置是我们所希望的 移动,旋转或者放大缩小场景中的物体(模型变换)(3)选择照相机镜头,并调整放大倍数(调焦) 显示物体时,可以选择物体是如何投影到屏幕上(投影变换)(4)原创 2015-11-06 16:27:34 · 2018 阅读 · 0 评论 -
OpenGL多视口变换函数:glViewport使用
OpenGL多视口变换函数:glViewport使用glViewport是OpenGL中的一个函数。计算机图形学中,在屏幕上打开窗口的任务是由窗口系统,而不是OpenGL负责的1.功能glViewport在默认情况下,视口被设置为占据打开窗口的整个像素矩形,如图1,窗口大小和设置视口大小相同,所以为了选择一个更小的绘图区域,就可以用glViewport函数来实现这一变换,在原创 2015-11-07 13:49:16 · 7509 阅读 · 0 评论 -
Visual Assist X 10.8.2042.0破解版安装提示
Visual Assist X 10.8.2042.0破解版请链接:点击打开链接VC2008以及更低版本包括VC6的破解方法:将VA_X.dll拷贝到安装目录覆盖同名文件。VC2010的破解方法:将VA_X.dll拷贝到以下目录覆盖同名文件。Windows7和Windows8中的路径C:/Users/用户名/AppData/Local/Microsoft/Visu原创 2015-11-06 15:37:41 · 2046 阅读 · 1 评论 -
MFC的API函数大全
目录API函数大全...11.API之网络函数...12. API之消息函数...13. API之文件处理函数...24. API之打印函数...55. API之文本和字体函数...76. API之菜单函数...87. API之位图、图标和光栅运算函数...98. API之绘图函数...119. API之设备场景函数...原创 2015-10-21 09:46:11 · 5529 阅读 · 0 评论 -
模拟手机通信录管理系统
《基于C++的面向对象程序设计实验报告》题目:模拟手机通信录管理系统课程实验学院:系别:计算机工程系专业:计算机科学与技术班级:1320541制作人:刘创 学号:132054137指导教师:完成时间:两天(12月13/14 ,周六周日) 目录第一章:总体功能介绍 1.1 绪论及问题描述..........................原创 2015-10-21 13:47:47 · 7394 阅读 · 6 评论 -
大端小端模式的检测代码实现
1.大端小端模式定义:大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法原创 2015-11-04 19:42:45 · 839 阅读 · 0 评论 -
程序员须知
重要的不是你用什么开发,而是你在开发什么。程序=算法+数据结构过程=对象+属性+方法+事件程序员的秘诀是:编程、编程、再编程。编程的秘诀是:思索、思索、再思索。自由固不是钱所能买到的,但能够为编程而卖掉。编程为了生活,生活为了编程。不要认为编程是一项任务,其实是一次让人羡慕的机会!编程之乐何处寻,数点梅翻译 2015-10-21 09:50:01 · 705 阅读 · 2 评论 -
最小堆的介绍以及实现
堆在实际应用中非常广泛,尤其是堆排序中,堆分为最小堆和最大堆排序,对应的二叉树也是很好理解,在这里简单介绍下最小堆的数据结构及实现代码(c++编译器中的实现)1.堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左孩子和右孩子节点的值。最大堆和最小堆是二叉堆的两种形式。最大堆:根结点的键值是所有堆结点键值中最大者。最小堆:根结点的键值是所原创 2015-11-03 21:18:32 · 1131 阅读 · 0 评论 -
float与double的精度值在编程中以及openGL超级宝典(第四版)及代码的错误之处#define M3D_INV_PI_DIV_180 (57.2957795130823229)
今天在研究图形学的旋转矩阵时。推导计算发现opengl超级宝典的错误之处openGL超级宝典(第四版)及代码的错误之处#define M3D_INV_PI_DIV_180 (57.2957795130823229)他的意思很明白是180/PI但是其倒数第二位数字2是错误的计算结果应该是#define M3D_INV_PI_DIV_180 (57.2957795130823209)是0而原创 2015-10-23 21:56:32 · 1263 阅读 · 0 评论 -
C语言中cos(x)或sin(x),x输入的是弧度,怎么输入角度
#define PI (3.14159265358979323846)#define PI_DIV_180 (0.017453292519943296)//π/180#define DegToRad(x) ((x)*PI_DIV_180)//角度转换为弧度让我们稍微写几行代码就可以验证其结果:// sin(x)中x角度还是弧度问题.cpp : 定义控制台应用程序的入口点。//原创 2015-10-24 10:29:45 · 29692 阅读 · 0 评论 -
windows平台上多网卡路由配置方法IP在dos下的操作大全
windows平台上多网卡路由配置方法Route命令公有print add delete和change四个子命令.print用于显示路由表中的路由信息,add用于向路由表中增加一条路由信息,delete用于从路由表中删除一条路由信息,change用于修改路由表中已存在的路由信息. a) Route print 在命令行下面输入route print然后回原创 2015-10-30 12:38:04 · 3273 阅读 · 0 评论 -
进度条 游戏中Win32进度条ProcessBar的编码
进度条 游戏中Win32进度条ProcessBar的写法#include #include //InitCommonControls#pragma comment(lib, "comctl32") //InitCommonControls//过程函数的返回值都是LRESULT,类型都是CALLBACKLRESULT CALLBACK WndProc(HWND hwnd原创 2015-10-30 11:41:22 · 1572 阅读 · 0 评论 -
顺序表创建以及查找排序算法(含有顺序查找算法、带哨兵站顺序查找、折半查找算法、冒泡排序)的C++实现在vs2013环境下实现
查找排序算法的C++实现在vs2013环境下实现折半查找算法带哨兵站顺序查找算法冒泡排序含有顺序查找算法、带哨兵站顺序查找、折半查找算法、冒泡排序#include#include#define MAX 100#define MaxSize 100typedef int DataType;typedef int KeyType;using name原创 2015-10-30 11:34:48 · 4930 阅读 · 0 评论