![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++基础
文章平均质量分 73
C++基础
聂炳玉
不断学习,不断提升
展开
-
C++内存管理(超长,例子很详细,排版很好)
收藏下来,慢慢看。[导语]内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放弃了C++超绝的性能。本期专题将从内存管理、内存泄漏、内存回收这三个方面来探讨C++转载 2020-06-17 15:35:30 · 628 阅读 · 0 评论 -
003.线程池
线程池实现,看类图和代码:/********************************************************************* 文件名: Thread.h** 描 述:** 应 用:********************************************************************/#pragma ...原创 2020-01-09 11:20:49 · 190 阅读 · 0 评论 -
001.单例实体
工作中一些类对象在整个工程中只需要有一份就可以,例如:线程池、内存池、日志引擎、数据库引擎等等。我们可以处理的方法有:定义成全局变量、使用单实体模式(自己取的名称)。下面实例时用到了2个方法:Singleton和SingletonEx。直接看代码/********************************************************************* 文件...原创 2020-01-08 10:45:09 · 239 阅读 · 0 评论 -
002.锁
直接代码#pragma once;#include <windows.h>//////////////////////////////////////////////////////////////////////////// 互斥体class Mutex{ CRITICAL_SECTION m_cs;public: Mutex(); ~Mutex(); ...原创 2020-01-06 14:22:43 · 119 阅读 · 0 评论 -
memcpy 和 memmove
void *memcpy(void*dst, const void *src, size_t count);void *memmove(void*dst, const void *src, size_t count);原创 2020-01-06 10:17:43 · 187 阅读 · 0 评论 -
数组指针和指针数组的区别
数组指针和指针数组的区别数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4转载 2017-05-02 23:31:20 · 372 阅读 · 0 评论 -
【游戏设计模式】之 《游戏编程模式》全书内容提炼总结
转自浅墨毛星云:http://blog.csdn.net/poem_qianmo/article/details/53240330这是一篇超过万字读书笔记,总结了《Game Programming Patterns》(中译版《游戏编程模式》)一书中所有章节与内容的知识梗概。我们知道,游戏行业其实一直很缺一本系统介绍游戏编程进阶技巧的书籍,而《游戏编程模式》的出现,正好弥转载 2017-02-13 20:52:01 · 490 阅读 · 0 评论 -
得到数组最后一个数
通过指向数字的指针来实现代码:#include "stdafx.h"#include using std::cout;using std::endl;int _tmain(int argc, _TCHAR* argv[]){ int data[] = { 1, 2, 3, 4, 5, 6, 78 }; int *p = (int*)(&data + 1) - 1; cou原创 2016-02-26 23:34:35 · 1291 阅读 · 0 评论 -
64位进程调用32位DLL详解
公司开发开发环境是64位,在读取一些加密文件时使用了第三方32位DLL。那么问题来了怎样在64位环境下调用32位DLL — — — —开启探索之旅相关资料:微软公司的官方网站针对这个问题描述如下:在64位的windows系统中,一个64位进程不能加载一个32位dll,同理一个32位进程也不能加载一个64位dll。但是,64位windows支持64位和32位进程(包括本机或跨机)间原创 2015-11-16 19:55:25 · 47017 阅读 · 16 评论 -
C++标准里 string和wstring
在C++标准里定义了两个字符串string和wstring typedef basic_string string; typedef basic_string wstring; 前者string是常用类型,可以看作char[],其实这正是与string定义中的_Elem=char相一致。而wstring,使用的是wchar_t类型,这是宽字符转载 2016-01-03 14:30:44 · 401 阅读 · 0 评论 -
C++ http请求
实例 代码#include "stdafx.h"#include #include #include #include #include using namespace std;#define MAXSIZE 1024#pragma comment(lib, "Wininet.lib") bool Urlopen(const _TCHAR* url, BYTE *&u原创 2016-01-03 00:55:58 · 1058 阅读 · 0 评论 -
DCM图--按SeriesNumber进行分类
留后面参考。------将文件中的DCM图按照序列号进行分类,将相同序列号的DCM图移动到与序列号同名的文件中#include "stdafx.h"#include #include #include #include #include #include #include #include #include "dcmtk/dcmdata/dctk.h"原创 2015-11-20 17:15:57 · 2036 阅读 · 0 评论 -
C++const/常量折叠
常量概念:为了使程序员能够在变和不变之间画一条界限,这在C++程序设计中提供了安全性和可控性。const的最初动机是取代预处理器#define来进行值替代。宏(#define)预编译器可以不受限制的建立宏并用它来代替值。预编译器只做文本替代,它没有类型检查概念,也没有类型检查功能。宏定义只在预处理期间存在,因此它不占用存储空间且能放在一个头文件里,目的是在使用它的所有编译单元提供一原创 2017-05-29 02:08:56 · 793 阅读 · 2 评论 -
内存对齐分配策略(含位域模式)
又发现一篇很好的文章:http://www.songho.ca/misc/alignment/dataalign.html转自:http://www.cnblogs.com/ToDoToTry/archive/2011/09/05/2167694.html1:内存对齐定义: 现在使用的计算机中内存空间都是按照字节划分的,从理论上讲似乎对任原创 2017-06-01 00:11:30 · 488 阅读 · 0 评论 -
for_each算法函数
转: http://www.cnblogs.com/lancidie/archive/2010/12/02/1894099.htmlfor_each函数原形templateclass _InIt, class _Fn1> inline _Fn1 for_each(_InIt _First, _InIt _Last, _Fn1 _Func)转载 2017-11-16 12:19:41 · 673 阅读 · 0 评论 -
C++ 拷贝构造函数和赋值运算符
转:https://www.cnblogs.com/wangguchangqing/p/6141743.htmlC++ 拷贝构造函数和赋值运算符本文主要介绍了拷贝构造函数和赋值运算符的区别,以及在什么时候调用拷贝构造函数、什么情况下调用赋值运算符。最后,简单的分析了下深拷贝和浅拷贝的问题。拷贝构造函数和赋值运算符在默认情况下(用户没有定义,但是也转载 2017-11-16 11:27:24 · 239 阅读 · 0 评论 -
remove和remove_if()
转:https://www.cnblogs.com/jeakeven/p/5013691.htmlremove和remove_if() 一、Remove()函数remove(beg,end,const T& value) //移除区间{beg,end)中每一个“与value相等”的元素; remove只是通过迭代器的指针向前移动来删除,将没有被删转载 2017-11-21 17:14:41 · 1792 阅读 · 0 评论 -
static_cast、dynamic_cast、const_cast和reinterpret_cast总结
1 static_cast用法:static_cast ( exdivssion ) 该运算符把exdivssion转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成子类表示)时,由于没有转载 2017-08-05 15:26:26 · 204 阅读 · 0 评论 -
联合体(union)——应用
今天在网上看到这样一道题union V {struct X {unsigned char s1:2;unsigned char s2:3;unsigned char s3:3;} x;unsigned char c;} v;v.c = 100;printf("%d", v.x.s3);结果是:3----------------------原创 2017-08-10 18:52:42 · 837 阅读 · 0 评论 -
delete this 的使用及注意事项
delete this 的使用及注意事项this对象是必须是用 new操作符分配的(而不是用new[],也不是用placement new,也不是局部对象,也不是global对象);delete this后,不能访问该对象任何的成员变量及虚函数(delete this回收的是数据,这包括对象的数据成员以及vtable,不包括函数代码);delete th转载 2017-08-08 10:25:10 · 11240 阅读 · 0 评论 -
关注C++细节——字面值初始化字符数组及字符串拷贝注意
[html] view plain copy print?char carr[] = "author:CSDN-iaccepted"; 此时,carr数组中元素的个数为21,最后一个位置用来存放空字符'\0'。所以如果写成carr[21] = "author:CSDN-iaccepted";就是错误的。转载 2017-06-18 01:13:15 · 363 阅读 · 0 评论 -
C++友元
友元可以是一个函 数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。友元不是成员函数,但是它可以访问类中的私有成员。友元破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员(不推荐使用)。友元函数友元函数是能够访问类中的私有成员的非成员函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样。友元的正确使用能提高程序的运行效率,但同时也破坏原创 2017-05-21 12:04:26 · 297 阅读 · 0 评论 -
VC++ CopyFile、MoveFile函数用法
BOOL CopyFile( LPCTSTR lpExistingFileName, // pointer to name of an existing fileLPCTSTR lpNewFileName, // pointer to filename to copy to BOOL bFailIfExists // flag for operation if file exi原创 2015-11-20 11:36:12 · 9524 阅读 · 0 评论 -
C++ 自动创建文件夹
实例#include "stdafx.h"#include #include #include #include #include using namespace std; int _tmain(int argc, _TCHAR* argv[]){ char *fileName="123\\1\\2\\3\\a.txt"原创 2015-11-16 00:16:28 · 7704 阅读 · 1 评论 -
动态库的使用
一 动态库的使用(1)在路径中添加动态库的位置或将动态库放在运行目录中(2)定义指针函数(3)调用动态库中的函数 typedef long (APIENTRY *FILESAVEASBINARY)(BYTE* vInFileData, long nDataLen); HMODULE hInst = LoadLibrary(strdll); FILE原创 2015-10-11 16:56:41 · 358 阅读 · 0 评论 -
char*转wchar_t
char*转BSTR*实例代码wchar_t* c2w(const char *str){ int length = strlen(str)+1; wchar_t *t = (wchar_t*)malloc(sizeof(wchar_t)*length); memset(t,0,length*sizeof(wchar_t)); MultiByteToWideChar(CP_原创 2015-11-10 00:22:32 · 451 阅读 · 0 评论 -
C++实现split函数
方法一 (流)实例:#include "stdafx.h"#include #include #include #include using namespace std;void SplitEx(const string& strOrignal , char ch , vector& vctString){ istringstream iss(strO原创 2015-10-21 13:01:32 · 3371 阅读 · 0 评论 -
二进制读取jpg和写jpg图
代码#include "stdafx.h"#include #include #include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ string strpath = "D:\\Dtest5\\Readjpg\\1.jpg"; string strR1 = "D:\\Dtest原创 2015-09-01 20:50:16 · 11801 阅读 · 1 评论 -
ofstream的使用方法
转载与: http://blog.chinaunix.net/uid-7190071-id-2677703.htmlofstream的使用方法 ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:转载 2015-08-31 21:09:12 · 1305 阅读 · 0 评论 -
filelength获取文件长度
filelength函数用于获取文件的长度,但是最大只能获取2g的文件大小,因为返回值类型long使用4个字节大小来表示,最大为2的31次方也就是2G的大小。 #include "stdafx.h"#include #include #include using namespace std;int _tmain(int argc, _TCHAR* argv[])原创 2015-08-31 21:04:36 · 11751 阅读 · 1 评论 -
C++笔记1
1、用#define声明一个常数,用以表明1年中有多少秒?#define SECONDS_PER_YEAR (60 * 60 * 24 *365)ULUL:无符号长整型2、类成员的初始化,初始化列表的初始化顺序与变量声明的顺序一致,而不是安照出现在初始化列表中的顺序。#includeusing namespace std;class Obj{public: Obj(in原创 2015-03-27 10:07:41 · 312 阅读 · 0 评论 -
inline与C语言中的宏
转自;百度百科 inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。但是为什么要这么替换,以下详细说明:1.C语言中的宏有哪些优缺点 优点:首先谈一下在C中使用这种形式宏定义的原因,C语言是一个效率很高的语言,这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈,代码生成等一系列的操作。因转载 2015-03-26 16:23:09 · 411 阅读 · 0 评论 -
交换2个数
交换a,b的值原创 2015-03-27 09:44:22 · 360 阅读 · 0 评论 -
C++的三大特性
OOP具有三大特性:封装性、继承性和多态性。1.封装性(Encapsulation) 所谓封装,就是将某些东西包装和隐藏起来,让外界无法直接使用,只能通过某些特定的方式才能访问。OO将万物都视为“对象”(Object),任何对象都具有特性和行为。我们将其特性称为“成员变量” (MemberVarible),将其行为称之为“成员函数"(Member Function),被封装转载 2015-03-26 16:29:39 · 514 阅读 · 0 评论 -
三十分钟掌握STL
这是本小人书。原名是《using stl》,不知道是谁写的。不过我倒觉得很有趣,所以化了两个晚上把它翻译出来。我没有对翻译出来的内容校验过。如果你没法在三十分钟内觉得有所收获,那么赶紧扔了它。文中我省略了很多东西。心疼那,浪费我两个晚上。译者:karycontact:karymay@163.netSTL概述STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离转载 2015-11-10 17:24:16 · 334 阅读 · 0 评论 -
计算一段程序运行时间
计算一段代码运行时间,不考虑多线程。实例:#include "stdafx.h"#include#include #include int _tmain(int argc, _TCHAR* argv[]){ clock_t start,finish; start = clock(); //...Sleep(1000); finish = cl原创 2015-09-11 15:32:05 · 645 阅读 · 0 评论 -
字符串编码之间的转换(GB2312<->UTF8<->Unicode)及URLEncoding .
LPWSTR GB2312ToUnicode(LPCSTR lpszInBuf){ if(NULL == lpszInBuf) { return NULL; } WCHAR* pBuf = NULL; int nLen = MultiByteToWideChar(CP_ACP, 0, lpszInBuf, -1, pBuf, 0); pBuf = new WCHA转载 2015-11-18 16:57:30 · 537 阅读 · 0 评论 -
C++运算符重载
struct TEST{ string str1; int n1; string str2; inline bool operator == (const TEST &t) const { if(this->str1 == t.str1 && this->n1 == t.n1 && this->str2 == t.str2) { return true; } }原创 2015-12-11 11:53:05 · 248 阅读 · 0 评论 -
在共享DLL中使用MFC 和 在静态库中使用MFC的区别 .
使用VS2008,在项目属性中有一项MFC的使用,有三种设置: 1.使用标准Windows库 2.在共享DLL中使用MFC 3.在静态库中使用MFC 第一种顾名思义。 第二种指的是打包时一些MFC的DLL的内容没有被包含在EXE文件中,所以EXE文件较小,但是运行时要求系统中要有相关的DLL文件。 第三种是将DLL转载 2015-11-18 16:55:24 · 521 阅读 · 0 评论 -
socket编程
基本步骤如下server client +++++++ ++++++++创建socket 创建sock原创 2015-11-23 13:23:53 · 331 阅读 · 0 评论