c++
文章平均质量分 76
jimeshui
这个作者很懒,什么都没留下…
展开
-
C++模板详解
C++模板转自:http://www.cnblogs.com/gw811/archive/2012/10/25/2736224.html 模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。 模板是一种对类型进行参数化的工具; 通常有两种形式:函数模板和类模板; 函数模板针对转载 2017-06-28 10:08:03 · 477 阅读 · 0 评论 -
应用DiskGenius恢复误删除卷(硬盘分区)后的硬盘分区和数据
问题的起因: 由于安装双系统或其它事务的需要,要涉及删除卷(硬盘分区)的操作。但有时我们一不小心,把不该删除的硬盘分区给删除了(第一感觉就是晴天霹雳,尤其是误删除的硬盘分区保存着最重要文件)。这时先别慌,有办法恢复的。 问题解决: 首先,删除卷还未把该盘的资料格式化,数据还在,只是没显示而已。 其次,恢复硬盘分区的可以用DiskGenius软件。原创 2014-12-15 01:15:29 · 22005 阅读 · 2 评论 -
hpp含义
hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再 将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用 project中的cpp文件数与编译次数,也不用再发布烦人的lib与dll,因此非常适合用来编写公用的开源库。转载 2015-01-15 21:04:36 · 754 阅读 · 0 评论 -
头文件重复引用
头文件重复引用 下面讲讲头文件重复引用的问题:#include文件的一个不利之处在于一个头文件可能会被多次包含,为了说明这种错误,考虑下面的代码:#include "x.h"#include "x.h"显然,这里文件x.h被包含了两次,没有人会故意编写这样的代码。但是下面的代码:#include "a.h"#include "b.h"看上去没什么问题。如果a.h和b转载 2015-01-15 15:58:30 · 654 阅读 · 0 评论 -
WORD、DWORD、int区别
定义WORD、DWORD其实主要是为了:1)便于移植,2)更为严格德类型检查。WORD固定是2字节,DWORD固定是4字节。 而int则不是,它随着操作系统的不同,可以有不一样的字节数。如在DOS和 Windows 3.x等16位操作系统下,int是2字节;在Windows 9x/2000/xp下,它是4字节。 在序列化操作中,因为序列化是按照字节流存取转载 2015-01-07 22:54:58 · 6147 阅读 · 1 评论 -
C++中如果声明一个对象指针时,不会调用构造函数
你要理解指针也是一种内置类型。一个指针在内存中也是有内存空间的。在现在大多数机器上指针都是32位的,也就是4个字节。如果你声明指针。例如,假设A是一个类A *pa; 这内存中会分配4个字节的空间存储一个地址。只不过地址是不可以用的,因为它没有有效的指向某一个有用的内存空间。这和你声明一个int类型是一样的。int p;内存中也会分配4个字节空间给p来存储一个整形值,只不过这个整形值不转载 2014-11-22 23:36:42 · 9257 阅读 · 0 评论 -
数组指针和指针数组的区别
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;转载 2014-11-23 01:30:25 · 214 阅读 · 0 评论 -
MFC中的MainFrame Dlg,App,Doc,View的关系
MainFrame: 主框架类Dlg 是Dialog 的缩写,表示对话框本身 App类就是这个SDI作为"程序"的入口,有点像c的Main函数,它不是从CWND中派生出来的。App表示应用程序本身。 View表示视图类,负责显示数据,提供编辑数据、修改数据的功能。它是指编辑区里面的事就是那块白色的中间区域,负责绘制和响应一些消息 Doc表示文档类,提供对转载 2014-11-27 22:47:58 · 518 阅读 · 0 评论 -
父类的static变量和函数在派生类中依然可用
父类的static变量和函数在派生类中依然可用,但是受访问性控制(比如,父类的private域中的就不可访问),而且对static变量来说,派生类和父类中的static变量是共用空间的,这点在利用static变量进行引用计数的时候要特别注意。转载 2014-11-23 00:07:16 · 328 阅读 · 0 评论 -
MFC中CString.Format的详细用法
在MFC程序中,使用CString来处理字符串是一个很不错的选择。CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的字符串。CString的Format方法给我们进行字符串的转换带来了很大的方便,比如常见的int、float和double这些数字类型转换为CString字符串只需一行代码就可以实现。 先看看Format用于转换的格式字符: %c转载 2014-10-20 22:09:03 · 222 阅读 · 0 评论 -
#pragma pack与内存分配
程序编译器对结构的存储的特殊处理确实提高CPU存储变量的速度,但是有时候也带来了一些麻烦,我们也屏蔽掉变量默认的对齐方式,自己可以设定变量的对齐方式。编译器中提供了#pragma pack(n)来设定变量以n字节对齐方式。n字节对齐就是说变量存放的起始地址的偏移量有两种情况:第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,第二、如果n小于该变量的类型所占用的字节转载 2015-03-29 08:19:10 · 589 阅读 · 0 评论 -
Unicode字符集和多字节字符集
Unicode字符集和多字节字符集关系在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(charset)。 在最初的时候,Internet上只有一种字符集——ANSI的ASCII字符集,它使用7 bits来表示一个字符,总共表示128个字符,其中包括了英文字母、数字、标点符号等常用字符。之后,又进行扩展,使用8转载 2015-05-31 17:51:33 · 528 阅读 · 0 评论 -
C++命名空间 namespace的作用和使用解析
转自:http://blog.sina.com.cn/s/blog_af68a2c201015pqo.html一、 为什么需要命名空间(问题提出)命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突。在 C语言中定义了3个层次的作用域,即文件(编译单元)、函数和复合语句。C++又引入了类作用域,类是出现在文件内的。在不同的作用域中可以定义相同名字的变量,互不于扰,系转载 2016-05-22 12:02:16 · 19711 阅读 · 7 评论 -
gdb使用方法简介(转)
编译时必须加上参数-g ,例:g++ -g temp.cpp -o temp.通过Gcc编译生成可执行文件才能用Gdb进行调试。 进入gdb界面:gdb temp. 提示符变成(gdb) (1)查看文件在Gdb中键入”l”(list)就可以查看所载入的文件 (2)设置断点只需在”b”后加入对应的行号即可(这是最常用的方式,另外还有其他方式设置断点)。如下所示:(gdb)b 6代码运行到第五行之转载 2016-05-10 21:25:32 · 402 阅读 · 0 评论 -
Python使用struct处理二进制
有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最重要的三个函数是pack(), unpack(), calcsize()pack(fmt, v1, v2, ...) 按照给定的格式(fmt),把数据封装成字符串(实际上转载 2016-03-27 16:17:00 · 277 阅读 · 0 评论 -
多线程中CloseHandle()函数的使用
CloseHandle()函数的使用??很多程序在创建线程都这样写的:............ThreadHandle = CreateThread(NULL,0,.....);CloseHandel(ThreadHandle );。。。。。这不是刚好创建又关闭了吗?线程怎么运行呢?======================================转载 2016-03-19 19:31:41 · 1941 阅读 · 0 评论 -
Linux下的环境变量设置
C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径。自己指定的路径就不说了,这里说明一下系统自动搜索的路径。【1】include头文件路径 除了默认的/usr/include, /usr/local/include等include路径外,还可以通过设置环境变量来添加系统inclu转载 2016-02-20 16:49:06 · 689 阅读 · 0 评论 -
c++中switch语句的使用问题
我们经常使用switch--case语句进行程序的分支控制,但注意几个问题:1、switch语句的判断的数据类型只可以为:整型、字符、布尔、枚举类型。2、每个case 判断语句后面一般要加上“break;”,即当switch中的值等于case的值时,执行完相应的语句就跳出函数体。如果不加break,则switch中的值在遇到第一个与之相等的case值时,则会忽略后面的case判断,原创 2015-11-19 15:26:09 · 932 阅读 · 0 评论 -
类的静态成员
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即类名>::静态成员名>。 在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来转载 2015-10-31 18:18:39 · 269 阅读 · 0 评论 -
关于C++多种数据类型四则运算的精度问题
在编程时,我们有时会将多种类型的数据一起进行四则运算,这是运算表达式的写法不同,则会造成运算的结果不一致,或者说精度不一致,这主要是截尾现象造成的。如:int b=2500;double r=3.5;int a;a=b/1000*r;cc'z当改为a=r*b/1000;原创 2015-09-24 00:26:43 · 1763 阅读 · 0 评论 -
vs调试报错:“_ASSERTE(_CrtIsValidHeapPointer(pUserData)) ”的问题解决
报错的代码位置:HeapValidate( _crtheap, 0, pHdr(pUserData) );_ASSERTE(_CrtIsValidHeapPointer(pUserData));exe中用new一块内存,但是在dll程序中delete引发的错误由于给类加了些东西结果,出现了大问题: 析构函数调用完后出错, 百思不得其解转载 2015-09-22 00:06:51 · 1840 阅读 · 0 评论 -
类在内存中的分配问题
一个类,有成员变量:静态与非静态之分;而成员函数有三种:静态的、非静态的、虚的。那么这些个东西在内存中到底是如何分配的呢?以一个例子来说明:[cpp] view plaincopy"font-size:16px;"> class CObject{public:static int a;CObjec转载 2014-11-19 01:17:54 · 256 阅读 · 0 评论 -
Visual Leak Detector (VLD)使用
Visual C++内置内存泄露检测工具,但是功能十分有限。VLD就相当强大,可以定位文件、行号,可以非常准确地找到内存泄漏的位置,而且还免费、开源!在使用的时候只要将VLD的头文件和lib文件放在工程文件中即可。也可以一次设置,新工程就不用重新设置了。只介绍在Visual Studio 2003/2005中的设置方法,VC++ 6.0类似:打开Tools -> Optio转载 2014-10-17 01:05:22 · 794 阅读 · 0 评论 -
机器学习中的算法__svm
本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系[email protected] 前言: 又有很长的一段时间没有更新博客了,距离上次更新已经有两个月的时间了。其中一个很大的原因是,不知道写什么好-_-,最近一段时间看了看关于SVM(Suppor转载 2014-09-01 16:43:39 · 337 阅读 · 0 评论 -
vector
在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。1 基本操作(1)头文件#include.(2)创建vector对象,vector vec;(3)尾部插入数字:vec.push_back(a);(4)使用下标访问元素,cout(5)使用迭代器访问元素.vectorint>::iterator it;for(it=ve转载 2014-09-13 23:25:49 · 283 阅读 · 0 评论 -
两台pc机用一个socket通信,每个pc机创建两个线程一个发消息一个收消息 windows socket
两台pc机用一个socket通信,每个pc机创建两个线程一个发消息一个收消息 windows socket//pc1#include #include #pragma comment(lib, "ws2_32.lib")HANDLE xinhao;SOCKET sockConn;DWORD WINAPI RecvProc(LPVOID lpParameter);转载 2014-08-20 18:03:11 · 838 阅读 · 0 评论 -
VC++ socket通信实例 总结
VC++ socket通信实例 总结1. 两天计算机通信需要协议,通信的两台计算机IP必须唯一2. 同一个计算机可以进行多个应用程序与其他计算机通信,IP地址唯一,而端口号是区别同一计算机(同一IP)的唯一标示。3. 实际上就类似于一个办公室的总机号码(IP)和分机号码(端口号)4. 协议:为了进行转载 2014-08-20 18:00:34 · 519 阅读 · 0 评论 -
c++函数返回引用
先看看该链接讨论的问题作为热身。http://topic.csdn.net/u/20070616/13/2a6a1739-1a69-4829-a90f-fdb19a61e095.html 函数返回值和返回引用是不同的函数返回值时会产生一个临时变量作为函数返回值的副本,而返回引用时不会产生值的副本,既然是引用,那引用谁呢?这个问题必须清楚,否则将无法理解返回引用到底是个什么概念。以下转载 2014-07-31 22:08:58 · 305 阅读 · 0 评论 -
opencv2.4.4 VideoCapture::open()的运用
opencv2.4.4中VideoCapture::open()原创 2014-08-05 23:06:04 · 1587 阅读 · 0 评论 -
dll方法调用引发的CrtIsValidHeapPointer错误
dll方法调用引发的CrtIsValidHeapPointer错 文章一 从CrtIsValidHeapPointer的实现代码处我们可以得知,这个函数不仅检查了空指针的情况,更重要的是检查了指针地址的有效性。我遇到的问题: 释放内存时,弹出assert,报错的函数就是上面提到的这个:CrtIsValidHeapP转载 2014-08-04 22:05:43 · 555 阅读 · 0 评论 -
c++Vector的使用误区
初始化vector并传引用到DLL中,DLL中为该引用添加节点,vector内存释放时会报堆栈错误,原因?这个问题其实挺好避免的,说白了就是不要一个模块new,另一个模块delete,不要认为你的vector的节点数据在栈上,vector的本质就是一个变长数组,怎么会在栈上呢,数据肯定是在堆上的,这样你就是在dll中申请的存储,在主程序里面释放的存储,出错很正常。原因简要的分析一下转载 2014-08-04 21:46:58 · 634 阅读 · 0 评论 -
C++ 智能指针详解
一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_ptr、boost::share转载 2014-10-25 22:57:44 · 193 阅读 · 0 评论 -
局部变量能否和全局变量重名?
首先,变量包括两个方面,类型和名称。比如double d = 0; void f() {int d = 5; double b = d; //全局变量,因此全局变量的类型更匹配}这种情况两个d是可以区别的,因此b最后是使用全局变量d进行赋值。其次,如果局部变量和全局变量的类型与名称完全一致,在局部变量定义的有效域中,局部变量将覆盖全局变量。直到退出局部变量定义域,全局变量的定义才又重转载 2014-11-12 01:54:10 · 3524 阅读 · 0 评论 -
5分钟搞定内存字节对齐
写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧/******************************分割线如果体系结构是不对齐的,A中的成员将会一个挨一个存储,从而sizeof(a)为11。显然对齐更浪费了空间。那么为什么要使用对齐呢?体系结构的对齐和不对齐,是在时间和空间转载 2014-11-19 01:11:55 · 265 阅读 · 0 评论 -
找出字符串中对称的子字符串的最大长度(最长回文)
所谓对称子字符串,就是这个子字符串要么是以其中一个词对称:比如 “aba”, “abcba”;要么就完全对称:比如"abba", "abccba"。问题:给你一个字符串,找出该字符串中对称的子字符串的最大长度。思路:首先,我们用字符数组 char[] array 来保持这个字符串,假设现在已经遍历到第 i 个字符,要找出以该字符为“中心”的最长对称字符串,我们需要用转载 2014-10-05 01:14:56 · 488 阅读 · 0 评论 -
C与C++中定义结构体的不同方式
C与C++中定义结构体的不同方式分三块来讲述:1 首先:在C中定义一个结构体类型要用typedef:typedef struct Student{int a;}Stu;于是在声明变量的时候就可:Stu stu1;如果没有typedef就必须用struct Student stu1;来声明这里的Stu实际上就是struct Studen转载 2014-10-04 11:20:10 · 249 阅读 · 0 评论 -
原码、反码、补码
原码:将一个整数,转换成二进制,就是其原码。如单字节的5的原码为:0000 0101;-5的原码为1000 0101。反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每一位取反。如单字节的5的反码为:0000 0101;-5的原码为1111 1010。补码:正数的补码就是其原码;负数的反码+1就是补码。如单字节的5的补码为:0000 0101;-5的原码为1111转载 2014-10-16 09:01:32 · 426 阅读 · 0 评论 -
结构体在内存中的对其规则
结构体在内存中的对其规则一个结构体变量定义完之后,其在内存中的存储并不等于其所包含元素的宽度之和。例一: #include using namespace std;转载 2014-10-06 10:19:47 · 372 阅读 · 0 评论 -
进程和线程
1.进程和线程1.1 概述:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.一个转载 2014-11-12 02:54:00 · 358 阅读 · 0 评论 -
自增、自减运算符
一、自增、自减运算符前缀和后缀形式的区别我们都知道C/C++中大名鼎鼎的自增运算符(++操作符)具有两种形式:前置操作和后置操作。从运算符的实现上来看,a++与++a的差别如下:(1)前递增运算a++,在执行过程中,先将对象进行递增修改,而后返回该对象的引用。(2)后递增运算++a,在运算符重载函数中采用值返回的方式编写,重载函数的内部创建一个用于临时存储原有对象值转载 2014-11-13 17:04:03 · 1050 阅读 · 0 评论