摘要:hash_map和map的区别分类:STL2008-10-15 21:245444人阅读评论(0)收藏举报class数据结构编译器存储平台tree这里列几个常见问题,应该对你理解和使用hash_map比较有帮助。4.1 hash_map和map的区别在哪里?构造函数。hash_map需要hash函数,等于函数;map只需要比较函数(小于函数).存储结构。hash_map采用hash表存储,map一般采用红黑树(RB Tree)实现。因此其memory数据结构是不一样的。4.2什么时候需要用hash_map,什么时候需要用map?总 体来说,hash_map查找速度会比map快,而且查找速度基本
阅读全文
随笔分类 - C++/C
摘要:这篇文章来自我今天碰到的一个问题,一个朋友问我使用map和hash_map的效率问题,虽然我也了解一些,但是我不敢直接告诉朋友,因为我怕我说错了,通过我查询一些帖子,我这里做一个总结!内容分别来自alvin_lee ,codeproject,codeguru.baidu等等!先看看alvin_lee 朋友做的解析,我觉得还是很正确的,从算法角度阐述了他们之间的问题!实际上这个问题不光C++会遇到,其他所有语言的标准容器的实现及选择上都是要考虑的。做应用程序你可能觉得影响不大,但是写算法或者核心代码就要小心了。今天改进代码,顺便又来温习基础功课了。 还记得Herb Sutter那极有味道的《C.
阅读全文
摘要:一个 VC Project 中,可能有很多地方需要用到版本号,比如 About 对话框、版本资源等。如果每次版本更改都一一去改变这些值,不但非常麻烦,而且有悖唯一原则。 巧妙地使用宏定义,可以很好地解决这个问题。 先来看看几个预处理操作符 (Preprocessor Operators):OperatorActionStringizing operator (#)Causes the corresponding actual argument to be enclosed in double quotation marksCharizing operator (#@)Causes the co
阅读全文
摘要:最近用到窗口变化的一些东西,遇到几个相关的消息函数,简要分析,作为备忘。3个消息分别是:WM_SIZE、WM_SIZING、WM_GETMINMAXINFO;分别对应相应的处理函数:OnSize、OnSizing、OnGetMinMaxInfo。当窗口大小发生变化时,响应的顺序依次是:WM_GETMINMAXINFO-->WM_SIZING-->WM_SIZE。OnGetMinMaxInfo这个函数在窗口初始化的时候会被调用一次,当窗口大小发生改变的时候也会被调用。利用这个函数,可以比较方便的实现窗口最大最小尺寸的控制。参数lpMMI是一个结构体指针,其中包含了有关窗口的最大化大小
阅读全文
摘要:环境: 同一局域网内,主机和虚拟机远程调试 远程计算机:虚拟机搭的WindowsXP/32(局域网中使用桥接,非局域网使用NAT) 本地计算机:Windows XP、Win71.本机计算机要求:VS2008 IDE 打开被调试代码 2.本机计算机登陆的用户名和密码,必须和远程计算机的登录名和密码相同,仅仅用户名相同,密码不同也是不可以的,会报错。 (也可以不设相同用户名和密码,貌似只有VC++下可以,在远程调试器选项里设置无验证模式,相应的在项目属性的调试页里设置,见下面调试方案1中VC++的"无验证模式"调试;) 3.远程计算机安装远程调试器:Remote Debugge
阅读全文
摘要:在网上找了好多资料才把这个调试环境搭好,下面总结一下:先说明两个概念:1.目标机:远程需要调试的机子,也就是被调试程序exe所在的机子,该机子可以安装VS2008或者不安装vs20082.调试机:安装VS2008的机子,就是存放代码下断点调试的机子,该机子必须安装vs2008下面介绍具体设置步骤:目标机:1.如果目标机安装了VS2008则直接在【开始菜单】->【Microsoft Visual Studio2008】->【VisualStudio Tools】下面找到Visual Studio 2008 Remote Debugger运行即可;如果目标机没有安装VS2008则需要将
阅读全文
摘要:1.itoa 在linux下没有itoa这个函数 原型:char *itoa(int value,char *string,int radix) 用法:#include 功能:将整数value转换成字符串存入string, radix为转换时所用基数(保存到字符串中的数据的进制基数 2 8 10 16) 说明:返回指向转换后的字符串的指针 举例: #include #include int main(void) { int number = 12345; char string[25]; itoa(number, string,10); printf("in...
阅读全文
摘要:lib 和 dll 的区别、生成以及使用详解【目录】lib dll介绍生成动态库调用动态库生成静态库调用静态库 首先介绍一下静态库(静态链接库)、动态库(动态链接库)的概念,首先两者都是代码共享的方式。静态库:在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中,这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。即静态库中的指令都全部被直接包含在最终生成的 EXE 文件中了。在vs中新建生成静态库的工程,编译生成成功后,只产生一个.lib文件动态库:动态链接库是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执.
阅读全文
摘要:强调一点:#pragma pack(4)typedef struct{ char buf[3]; word a;}kk;#pragma pack()对齐的原则是min(sizeof(word ),4)=2,因此是2字节对齐,而不是我们认为的4字节对齐。 这里有三点很重要:1.每个成员分别按自己的方式对齐,并能最小化长度2.复杂类型(如结构)的默认对齐方式是它最长的成员的对齐方式,这样在成员是复杂类型时,可以最小化长度3.对齐后的长度必须是成员中最大的对齐参数的整数倍,这样在处理数组时可以保证每一项都边界对齐 补充一下,对于数组,比如:char a[3];这种,它的对齐方式和分别写3个c...
阅读全文
摘要:经过一番查找,最给力的参考是http://www.cnblogs.com/visoeclipse/archive/2010/02/27/1674866.html-----------------------以下为转载--------------------------------------------------------------首先感谢这位几仁兄的几篇博客: http://hi.baidu.com/fairysky/blog/item/130dda13db7b050a5aaf53be.html http://hi.baidu.com/fairysky/blog/item/e7a...
阅读全文
摘要:rc和rc2都是资源文件,包含了应用程序中用到的所有的资源。两者不同在于:rc文件中的资源可以直接在VC集成环境中以可视化的方法进行编辑和修改;而rc2中的资源不能在VC的集成环境下直接进行编辑和修改, 而是由根据需要手工地进行编辑。 在下面的地址找到关于RC2文件的描述: http://msdn.microsoft.com/zh-cn/library/y3sk7e6b(VS.80).aspx RC2文件:包含项目使用的附加资源的脚本文件。可以在项目的 .rc 文件的顶部包括 .rc2 文件。 .rc2 文件用于存放由多个不同项目使用的资源。不必为不同的项目多次创建相同的资源,而是可以将它们.
阅读全文
摘要:DLL搜索路径和DLL劫持环境:XP SP3 VS2005作者:magictong 为什么要把DLL搜索路径(DLL ORDER)和DLL劫持(DLL Hajack)拿到一起讲呢?呵呵,其实没啥深意,仅仅是二者有因果关系而已。可以讲正是因为Windows系统下面DLL的搜索路径存在的漏洞才有了后来的一段时间的DLL劫持大肆流行。 最近(其实不是最近,哈,是以前分析过,断断续续的……)简单分析了一个DLL劫持下载者的行为,感觉有必要写点东西说明一下。其实DLL劫持是比较好预防的,从编程规范上我们可以进行规避(后面会专门讲到),从实时防护的角度来讲我们也可以想出一些办法进行拦截。新的DLL劫持者.
阅读全文
摘要:最近接手的一个项目开发中用到了很多第三方库,比如boost、gdal、xerces等等这些。从接手项目到现在从中学习到了很多之前从未见识过的东西。项目绝大部分都是前辈们写的,对于里面的对第三方库的管理我感觉是很不错的,所以记录下来以备后用,好的东西同时也应该分享给更多的可能会用到的。。。项目开发中,如果遇到不是自己开发的项目时,当需要另外的人去维护时,经常连正常的编译连接都不能通过,很多的都是需要设置一些工程属性什么的,搞了半天最终才能编译通过。像这些类似的体力活可能是大多数人不愿弄的。这里说的是对项目中所使用到的第三方库使用属性表进行统一管理起来,当在其他地方使用这些第三方库或者功能移植时.
阅读全文
摘要:退出线程可以有四种方法:1.线程函数的return返回(最好这样): 其中用线程函数的return返回, 而终止线程是最安全的, 在线程函数return返回后, 会清理函数内申请的类对象, 即调用这些对象的析构函数. 然后会自动调用 _endthreadex()函数来清理 _beginthreadex(...)函数申请的资源(主要是创建的tiddata对象).2.调用 _endthreadex()函数 或 ExitThread()函数(最好不要): 如果使用这两种方法退出线程, 则不会执行线程函数的return语句, 所以就不会调用线程函数作用域内申请的类对象的析构函数, 会造成内存泄露...
阅读全文
摘要:做视频采集与处理,自然少不了要学会分析YUV数据。因为从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264、MPEG视频编解码)的角度来说,也是在原始YUV码流进行编码和解析,所以,了解如何分析YUV数据流对于做视频领域的人而言,至关重要。本文就是根据我的学习和了解,简单地介绍如何分析YUV数据流。 YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。 与我们熟知的RGB类似,YU...
阅读全文
摘要:C++初始化列表问题,类中有一个对象类型的数组成员变量,在初始化列表中初始化时报错“[]”操作符语法错误class ClassA{private ClassB arrayOfObjectClassB[2];public ClassA(int i):arrayObjectOfClassB[0](i),arrayObjectOfClassB[1](i)}arrayObjectOfClassB[0](i)这儿有问题初始化列表中,只能初始化 单个变量 或 类的对象,不能初始化数组数组作为成员变量时只有默认初始化,也就是无法传递参数。有两种变通方案:你可以把对象数组改成指针数组,或者把ClassB类的.
阅读全文
摘要:手动写了一个类,需要引入预编译头stdafx.h。结果编译时提示XXXX不是类或命名空间名。处理方法:将#include "stdafx.h"放在最前面。
阅读全文
摘要:应用程序事件日志中:“C:\windows\system32\test.exe”的激活上下文生成失败。 找不到从属程序集 Microsoft.VC80.MFC,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762"。 请使用 sxstrace.exe 进行详细诊断。出现这类问题,是由于VC2005编译出来的程序文件,采用了manifest方式来指定dll文件。对于win98、
阅读全文
摘要:C/C++对时间的操作也有许多值得大家注意的地方。最近,在技术群中有很多网友也多次问到过C++语言中对时间的操作、获取和显示等等的问题。下面,在这篇文章中,笔者将主要介绍在C/C++中时间和日期的使用方法. 通过学习许多C/C++库,你可以有很多操作、使用时间的方法。但在这之前你需要了解一些“时间”和“日期”的概念,主要有以下几个: Coordinated Universal Time(UTC):协调世界时,又称为世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT)。比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5...
阅读全文
摘要:ODBC API开发教程作者:闻怡洋未得到作者允许请勿转载http://wyy.vchelp.net/目录第 1 章 介绍... 2第 2 章 ODBC API访问数据库... 22.1 ODBC简要介绍... 22.1.1 在没有ODBC以前... 22.1.2 ODBC介绍... 32.1.3 ODBC结构... 32.1.4 ODBC的一致性... 42.2 使用ODBC进行数据库开发基本知识介绍... 42.2.1 建立ODBC DSN.. 42.2.2 使用ODBC所需要的文件... 62.2.3 SQL语句执行方式介绍... 62.2.4 获取SQL语句执行的结果... 72.2.
阅读全文