C/C++/STL
_北方的雪_
这个作者很懒,什么都没留下…
展开
-
CONST用法小结
近来与同学讨论c/c++方面的问题,尤其感到const的用法又杂又乱,着实需要总结下。其实不管是在c中还是在c++中,const的用法其实还是很普遍的。在说const的用法之前首先要明确的是为什么要引入const?大家知道,C++有一个类型严格的编译系统,这使得C++程序的错误在编译阶段即可发现许多,从而使得出错率大为减少,因此,也成为了C++与C相比有着突出优点的一个方面。C中很常见原创 2012-12-22 21:22:03 · 509 阅读 · 0 评论 -
Heap Corruption Detected解决方法
最近在编程的过程中遇到一个问题,比较隐蔽,问题如下:这个错误是说在0x01F641A8处发生堆问题,下一句是说在堆buffer末尾内存中写入了数值。这个问题显然在动态分配、释放时内存才会发生的。在解决这个问题问题前首要要了解在new和delete时堆中的内存是怎么分配的,是什么内存结构?引用《c++反汇编与逆向分析技术揭秘》中的内容:从上面的知识可以原创 2013-07-16 12:46:17 · 11781 阅读 · 2 评论 -
<cstring>、<string.h>和<string>用法区别总结
我相信很多人和我一样,在用到这三个头文件的时候总是稀里糊涂的,现总结如下,具体有什么疑问可查询MSDN。总体来说:是旧的C 头文件,对应的是基于char*的字符串处理函数;是对应于旧C 头文件的std 版本,主要用在MFC中;是包装了std 的C++头文件,是新的string 类,其分两种对应的是char和wchar_t,其对应的命名空间分别是using st原创 2013-07-14 21:26:51 · 2325 阅读 · 0 评论 -
常用常见数据格式的转换
本片文章主要记录以下内容:1 算术类型转化为相应的string表示形式2 数值型数据的字符表示形式转化为相应的算术值3 算术类型转化为相应的CString表示形式4 string类型与char*的相互转换5 string类型与CString类型的相互转换6 char*与CString数据类型的相互转换具体如下:1算术类型转化为相应的string表示形式1原创 2013-09-06 13:00:42 · 1303 阅读 · 0 评论 -
cin条件状态及break/continue
int judge_input(int min,int max)//(含min与max){ int n; while(true) { cin>>n; if(cin.fail()) { cout<<"请输入数字!\n"; cin.clear(); cin.ignore(100,'\n'); continue; } if(nmax) { c原创 2013-09-08 16:32:27 · 1239 阅读 · 0 评论 -
static用法小结
最近在看《设计模式》,在学习到单例模式时,对static的用法有些模糊,故总结如下:(1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数下面就这三种使用方式及注意事项分别说明 一、局部静态变量 在C/C++中, 局部变量按照存储形式可分为三种auto, static, register 与auto类型(普通)局部变量相比, static局原创 2013-03-16 15:04:04 · 603 阅读 · 0 评论 -
《Effective C++》总结
从C转向C++部分:1. 条款1:尽量用const和inline而不用#define1) 使用#defineNUM 1.5时,对应代码是预编译时检查,并将所有的NUM替换为1.5,这样在编译阶段如果有编译错误发生,会提示1.5而不是符号名NUM,不易检查。内存管理部分:2. 条款7:预先准备好内存不够的情况1) 在动态申请内存时,要考虑到内存不能够申请的情况原创 2013-11-27 16:06:32 · 1260 阅读 · 0 评论 -
C++中的类型转换
C++中类型转换分为两种:强制类型转换和隐式类型转换。常见的强制类型转换有:const_cast、static_cast、dynamic_cast、reinterpret_cast;隐式类型转换分为常见内置类型的隐式转换和类类型的隐式转换。强制类型转换: 1. Const_cast:去除原先类型的Const属性;2. Static_cast:1原创 2013-12-04 21:22:00 · 655 阅读 · 0 评论 -
解决头文件相互包含问题的方法
所谓超前引用是指一个类型在定义之前就被用来定义变量和声明函数。 一般情况下,C/C++要求所有的类型必须在使用前被定义,但是在一些特殊情况下,这种要求无法满足,例如,在类CMyView中保留了一个非模式对话框对象指针,该对象用于显示/修改一些信息。为了实现对话框"应用"按钮,把对话框做的修改立刻更新到view界面上,为此,需要在对话框类中需要保存view类的指针,这样定义关系就变成如下的转载 2013-12-27 16:56:05 · 786 阅读 · 0 评论 -
《剑指offer》 第五章优化时间和空间效率 总结
在时间复杂度不能满足要求时,借助辅助空间。1. Partition函数方法是一种“从n个数字中查找第k大数字”的较好的方法,其复杂度是O(N),缺点是会改变原来的数组;2. 学会并熟悉STL中常见的函数模板和容器,如set、multiset、unordered_set、qsort等3. 如果需要判断多个字符是否在某个字符串中出现过或者统计多个字原创 2014-02-13 00:51:23 · 865 阅读 · 0 评论 -
《剑指offer》第四章 解决面试题的思路 总结
常见的解决思路、方法是:画图、举例以及分解。1. 画图:将抽象的问题具体化;2. 举例:将抽象的问题具体化;在面对较难或时间复杂度要求较高的问题时,通常引入辅助空间(栈,队列、哈希表等);3. 分解:分解让较复杂的问题一步一步解决,使之简单化; 常见的分解方法有分治法、动态规划法等;4. 注意递归的灵活调用(和while循环的原创 2014-02-13 00:50:33 · 736 阅读 · 0 评论 -
c++中抽象类与接口的区别
其实对抽象类与接口的区别一直是搞不太清楚,最近正在学习《设计模式》,期间用到了很多c++多态的知识。这是才恍然发现,是应该整理下这方面的知识了。但在翻阅书本、上网查阅资料之际,发现有篇文章总结的不错。于是,转载(博主勿怪)并稍作修改如下:抽象类:抽象类是特殊的类,只是不能被实例化(将定义了一个或多个纯虚函数的类称为抽象类);除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类转载 2013-03-13 15:21:03 · 2332 阅读 · 0 评论 -
VS2008 C++ 调用MATLAB 2009b 生成的DLL
刚开始学习用VC++调用matlab生成的DLL,找了网上一些资料,难以找到vs2008与MATLAB2009b版本的,按照以往版本做的总是有很多错误。经过两天努力,终于调试成功,这里将经验总结一下,以供有需要的人们参考。实验环境:Win7MATLAB 2009b(安装路径:E:/Program Files/MATLAB/R2009a)VS2008 中文版(安装路径:E:/Prog转载 2014-05-19 14:45:59 · 1077 阅读 · 0 评论 -
try,catch,throw异常捕捉
try,catch,throw: try包含你要防护的代码,称为防护块. 防护块如果出现异常,会自动生成异常对象并抛出. catch捕捉特定的异常,并在其中进行适当处理. throw可以直接抛出/产生异常,导致控制流程转到catch块. 重要观点: C原创 2014-09-05 22:56:51 · 2843 阅读 · 0 评论 -
C++中的单例模式
单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。 单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做转载 2014-09-05 22:55:16 · 489 阅读 · 0 评论 -
操作系统、计算机网络、设计模式
基础篇:操作系统、计算机网络、设计模式一:操作系统1. 进程的有哪几种状态,状态转换图,及导致转换的事件。2. 进程与线程的区别。3. 进程通信的几种方式。4. 线程同步几种方式。(一定要会写生产者、消费者问题,完全消化理解)5. 线程的实现方式. (也就是用户线程与内核线程的区别)6. 用户态和核心态的区别。7. 用户栈和内核栈的区转载 2014-09-17 15:53:40 · 1099 阅读 · 0 评论 -
第二章 啊哈!算法(变位词)
给定一个英语字典,找出其中的所有变位词集合。例如,“pots”、“stop”和“tops”互为变位词,因为每一个单词都可以通过改变其他单词中字母的顺序来得到。“解决这个问题的许多方法都出奇地低效和复杂。任何一种考虑单词中所有字母的排列的方法都注定了要失败。而比较所有单词对的任何方法在我的机器上运行至少要花费一整夜的时间。”我们获得的”啊哈!灵机一动“就是标识字典中的每一个词,使得在转载 2014-09-09 21:58:54 · 1417 阅读 · 0 评论 -
《编程珠玑》第二章 “杂技算法” 和 “翻转算法” C语言实现
题目:将一个n元一维数组a[n]左移i个位置。例如,当n=8,i=3时,数组abcdefgh旋转为defghabc。请设计一个算法完成这个任务。杂技算法分析:将a[0]存储在一个临时变量中,然后将a[i]替换a[0],a[2i]替换a[i]….当一个循环结束的时候,若替换次数小于n,则从a[1]开始替换…,需要经过gcd(n,i)(n和i的最大公约数)次循环后,才能把每转载 2014-09-09 21:57:55 · 825 阅读 · 0 评论 -
struct指针数组的析构问题
这个问题比较隐蔽.#include "stdafx.h"#include "1.h"//定义了结构体#include #include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ plant p1; p1.p_flower=new flower[10]; p1.num=10; char a[10]原创 2013-07-14 21:38:07 · 1652 阅读 · 0 评论 -
CString与string、char*间的相互转换及介绍说明
CString与string、char*间的说明及区别1 CString 主要是在MFC或者ATL中的实现,而string是C++标准库中的实现。CString在非MFC环境下要用atlstr.h头文件,在MFC环境下用cstringt.h头文件;而string的头文件为 string。2 string和CString均是字符串模板类,string为标准模板类(STL)定义原创 2013-05-03 11:10:30 · 955 阅读 · 0 评论 -
c++文件的读写
本教程将以C++最基本的文件I/O(输出/输出)开始。此后,我将从更深入的方面,为你展示一些技巧,并分析给出一些有用的函数。你需要对C++有一个较好的理解,否则这个教程于你而言将是陌生而毫无用处。 你的第一个程序 首先我将给出一段代码,接着再逐行进行解释。我们的第一个程序将建立一个文件,并写入一些字符: #include void main() //程序从这里开转载 2013-07-11 23:21:54 · 1609 阅读 · 0 评论 -
堆与栈区别
最近看《深入理解计算机系统》,对堆与栈的区别一直不清,故结合搜集的资料总结下~基础知识程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) ― 一般由程序员分配释放, 若程序员不释放,程序原创 2013-01-17 20:03:53 · 527 阅读 · 0 评论 -
++八大金刚
c++八大金刚Essential c++---lippman---C++之父,旁枝暂略,主攻核心,轻薄短小,初学者The c++ programming language----C++之父,技术权威,用词深峻,思想深远,c++百科全书代表,圣经c++ Primer----lippman---纵横书市十数年,c++最佳教本,c++百科全书代表Inside the原创 2013-01-21 10:53:49 · 1532 阅读 · 0 评论 -
深入浅出UML类图
深入浅出UML类图 在UML 2.0的13种图形中,类图是使用频率最高的UML图之一。Martin Fowler在其著作《UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition》(《UML精粹:标准对象建模语言简明指南(第3转载 2013-03-11 11:20:34 · 852 阅读 · 0 评论 -
虚函数与纯虚函数
虚函数与纯虚函数虚函数和纯虚函数有以下所示方面的区别。(1)类里如果声明了虚函数,这个函数是实现的,哪怕是空实现,它的作用就是为了能让这个函数在它的子类里面可以被覆盖,这样的话,这样编译器就可以使用后期绑定来达到多态了。纯虚函数只是一个接口,是个函数的声明而已,它要留到子类里去实现。(2)虚函数在子类里面也可以不重载的;但纯虚函数必须在子类去实现,这就像Java的接口一样。通常把很多函转载 2013-03-13 15:28:33 · 888 阅读 · 0 评论 -
堆和栈的区别
最近在看《thinking in c++》,在读到第13章《动态对象创建》的时候我对堆与栈的区别总是模棱两可,可想当初读《深入理解计算机系统》的时候,记得在编译、链接原理那一章有相关的介绍,而且读的时候似乎对堆与栈的区别似有理解,可现在竟忘的说不出个一二三来,好记性不如烂笔头啊!从网上搜得一篇以此为主题的文章,并结合自己的理解体会做了修改并保存下来,以备后用,。一、 预备知识原创 2013-03-16 21:38:25 · 873 阅读 · 0 评论 -
c++类对象内存结构
C++类对象内存结构 首先介绍一下C++中有继承关系的类对象内存的布局: 在C++中,如果类中有虚函数,那么它就会有一个虚函数表的指针__vfptr,在类对象最开始的内存数据中。之后是类中的成员变量的内存数据。 对于子类,最开始的内存数据记录着父类对象的拷贝(包括父类虚函数表指针和成员变量)。 之后是子类自己的成员变量数据。 对于子类的子类,也是同样的原理。但是无论继承了多少转载 2013-03-18 20:42:02 · 725 阅读 · 0 评论 -
VC中对CPU占用率的控制
1下面代码生成了一条CPU占用率为50%的直第一种方法for(;;) { for(int i=0;i<6600000;i++)//这个数字根据个PC的主频计算,结合机器周期与时钟周期的知识计算并做适当调节得到 ; Sleep(100);//这里的数值不易过小,若远小于Windows的调度时间片,会造成线程频繁的唤醒和挂起,无形中增加了内核时间 //的不确定性原创 2013-04-22 22:02:10 · 4766 阅读 · 0 评论 -
进程与线程学习(三)之线程之使用场合
在对进程、线程的学习稍加了解后,不仅会自问在什么情况下要使用多线程?毕竟,对知识的学习而不在于知识本身,而是怎么使用所学的知识,有什么局限性。但从耗时来讲,我对多线程做了一些测试:程序如下:只有一个主线程来估计买票时间;#include "stdafx.h"#include "windows.h"#include "iostream"using namespace std;原创 2013-04-27 14:51:09 · 1398 阅读 · 0 评论 -
进程与线程学习(二)
第一个线程程序的创建:进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源;而程序不能申请系统资源,不能被系统调度,也不能作为独立的运行的单位, 因此,他不占用系统的运行资源。进程由两个部分组成: 1、操作系统用来管理进程的内核对象。内核对象是操作系统内部分配的一个内存块,内核对象也是系统用来存放关于进程的统计信息的地方。 2、地址空间。它包含所有原创 2013-04-23 11:00:02 · 739 阅读 · 0 评论 -
进程与线程的学习(-)
为获得某一进程的进程与线程的信息可使用typedef struct tagPROCESSENTRY32 { DWORD dwSize;//该结构体所占的字节数 DWORD cntUsage;//停用 DWORD th32ProcessID;//进程ID号,也可以通过GetProcessId(GetCurrentProcess())获得 ULONG_P原创 2013-04-22 22:27:41 · 825 阅读 · 0 评论 -
多线程学习之四
在多线程学习的过程中,不可避免的是线程同步的问题了。线程同步的方主要有以下四种法:1、临界区:通过临界区实现多个线程对同一公共资源或一段代码的串行访问,速度快,适合控制数据的访问。2、互斥量:通过协调线程共同对一个共享资源的单独访问而设计。3、信号量:可以控制有限用户对同一资源的的访问而设计;4、事件:通过通知线程的有一些事件已经发生,从而可以启动后续的任务原创 2013-04-29 14:09:58 · 686 阅读 · 0 评论 -
多线程学习五之网络聊天室的实现
在学习完孙鑫老师的网络聊天室部分后,现总结如下:使用套接字(UDP)的顺序如下:1 加载套接字库BOOL AfxSocketInit( WSADATA* lpwsaData = NULL ); 它负责加载套接字库,并进行版本协商。2 创建套接字SOCKET WSAAPI socket( _In_ int af,//地址家族 _In_ int t原创 2013-04-29 15:10:43 · 1021 阅读 · 0 评论 -
C++中类对象所占空间的大小
首先,平时所声明的类只是一种类型定义,它本身是没有大小可言的。 因此,如果用sizeof运算符对一个类型名操作,那得到的是具有该类型实体的大小。计算一个类对象的大小时的规律:空类、单一继承的空类、多重继承的空类所占空间大小为:1(字节,下同);一个类中,虚函数本身、成员函数(包括静态与非静态)和静态数据成员都是不占用类对象的存储空间的;因此一个对象的大小≥所有非静态成员大小的总转载 2013-03-18 20:46:08 · 953 阅读 · 0 评论 -
单文档OpenGL的初始化
1、配置OpenGL环境配置OpenGL环境,添加.lib类库2、添加头文件在stdafx.h中添加头文件(放到其他文件中也可以)#include #include 3、添加变量public: CClientDC *m_pDC; //Device Context 设备上下文 HGLRC m_hRC; //R原创 2013-05-25 13:50:00 · 1276 阅读 · 0 评论 -
图形学作业总结
最近一段时间在做图形学的一个作业,在这个过程中学到了一些东西总结如下:1. MFC单文档框架app类、框架梁、doc类与view类的相互调用;2. MFC框架生成窗口的过程以及这个过程中的各部分的作用;3. MFC libray的类继承关系是怎么样的?4. MFC框架的析构顺序是怎么样的?在生成窗口后,VS中的停止调试与手动关原创 2013-05-25 13:46:37 · 948 阅读 · 0 评论 -
VS08常见调试错误
1. 不能从const char *(或者char数组)转换为LPCWSTRa) 解决: _T("TEST");b) 原因:在UNICODE(宽字节)字符集 typedef unsigned short wchar_t ,占2个字节;ANSI char 占一个字节;而系统默认使用UNICODE字符集c) 参见http://blog.csdn.ne原创 2013-06-06 23:17:35 · 739 阅读 · 0 评论 -
c++虚函数深度解析
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这转载 2014-10-21 14:29:00 · 735 阅读 · 0 评论