经验技巧
文章平均质量分 68
cbNotes
这个作者很懒,什么都没留下…
展开
-
map容器插入数据的4种方法
在构造map容器后,我们就可以往里面插入数据了。这里讲四种插入数据的方法:第一种:用insert函数插入pair数据:在VC下请加入这条语句,屏蔽4786警告 #pragma warning (disable:4786) ) mapint, string> mapStudent; mapStudent.insert(pairint, string>(1, "原创 2017-08-02 18:56:50 · 20475 阅读 · 0 评论 -
防止CListCtrl 闪烁的几种方法
一:彻底解决了CListCtrl的闪烁问题.此灵感来自于WindowMediaPlayer SDK 9方法很简单.如下:在对话框上加了个静态文本框.并把文本框的样式设为透明.再用SetParent()函数把CListCtrl的父窗口设为刚加的静态文本框.嘿嘿彻底不闪了...代码如下:1在CMyDlg中添加成员 CListCtrl m_List;2BOOL CM转载 2016-05-16 17:12:26 · 2162 阅读 · 0 评论 -
win32,win64编程永恒;语言编程需要注意的64位和32机器的区别
一、数据类型特别是int相关的类型在不同位数机器的平台下长度不同。C99标准并不规定具体数据类型的长度大小,只规定级别。作下比较:16位平台char 1个字节8位short 2个字节16位int 2个字节16位long 4个字节32位指针 2个字节32位平台转载 2016-03-21 17:43:22 · 1965 阅读 · 0 评论 -
C/C++面试常见的几个库函数详解(strcpy,memcpy,memset,atoi...)
前言在面试中,常常会被问到几个库函数的实现,虽然代码很短,涉及的细节却特别多,因此特别受面试官青睐,所以要把他们熟记于心,方能应对自如。strcpy()原型声明:char strcpy(char dest, const char *src); 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间 说明:src和dest所指内存区域不可以转载 2016-03-08 18:55:29 · 1327 阅读 · 0 评论 -
const 详解
零、文章来由打算将基础知识在看书的同时系统的整理一下,方便大家也方便自己。整理的知识尽量参照书本知识,比网上获取的资料有更高的可信度。一、从 文字常量和常变量 开始1、文字常量程序中的特殊标识符或表达式,由于同时满足: (1)不可寻址(放在代码区) (2)值不可变 所以可视为文字常量。他们是 静态数组名、枚举变量、全局(静态变量)首地址、#define定转载 2016-03-08 18:28:28 · 1471 阅读 · 0 评论 -
利用命令切换CTabCtrl控件的Tab页面
在项目中有时需要自动切换CTabCtrl控件的Tab页面,通过下面的发发可以实现该功能:void SwitchTab(int nTab){ NMHDR nm; nm.hwndFrom = m_tabShow.m_hWnd; nm.code = TCN_SELCHANGE; m_tabShow.SetCurSel(nTab); m_tabShow.SendMe原创 2016-03-30 13:51:42 · 2252 阅读 · 0 评论 -
人人都该了解的十大算法
算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 快速排序使用分治法(Divide and conquer)策转载 2015-12-09 14:12:15 · 1421 阅读 · 0 评论 -
写一个memcpy()函数你能拿几分?
不考虑性能的话,memcpy()在C99编译器下可以写为:void *memcpy(void *restrict dest, const void *restrict src, size_t n){ int i; const char *s = src; char *d = dest; assert(dest && src);转载 2015-12-09 14:52:07 · 868 阅读 · 0 评论 -
C语言宏定义##连接符和#符的使用
#include#define f(a,b) a##b#define g(a) #a#define h(a) g(a)int main(){ printf("%s\n",h(f(1,2))); printf("%s\n",g(f(1,2))); return 0;}在宏定义里,a##b就是把a,b联接起来,比如f(1,2)就是12,但是是数。#a就是把a转化成字串转载 2015-12-23 16:59:30 · 22189 阅读 · 1 评论 -
C,C++宏中#与##的讲解
文中__FILE__与示例1可以参见《使用ANSI C and Microsoft C++中常用的预定义宏》宏中的#的功能是将其后面的宏参数进行字符串化操作(Stringizing operator),简单说就是在它引用的宏变量的左右各加上一个双引号。如定义好#define STRING(x) #x之后,下面二条语句就等价。 char *pChar = "hello";转载 2015-12-23 16:57:32 · 689 阅读 · 0 评论 -
使用OutputDebugString帮助调试
前面我已经介绍了使用TRACE来帮助我们调试,但使用TRACE有一个限制,只能在将程序DEBUG编译状态下才能使用,下面我们介绍OutputDebugString函数,通过它,可以在在DEBUG或RELEASE情况也可以输出调试日志,从而对那些要求编译为RELEASE的程序可以方便的调试。OutputDebugString的函数原型:void OutputDebugString(转载 2015-12-23 16:54:04 · 1873 阅读 · 0 评论 -
SendMessageTimeOut函数你使用过吗?
在WINDOW编程中,发送消息是很正常的事情,发送消息的常用API有SendMessage,PostMessage,PostThreadMessage。一般每个线程有两个队列,一个用来接受通过Send函数的消息,另外一个队列接收通过Post接收的消息。该两个函数的基本区别是,一个函数需要等待返回的,相当于函数调用,这个是SendMessage;另外一个是将消息放到对方的队列中直接返回。使用Post原创 2015-12-23 16:51:50 · 3974 阅读 · 0 评论 -
线程分离的定时器一点经验
说道定时器,很多人都会想到Windows定时器SetTimer吧!其实,项目里面原本确实是使用这种方法实现动画效果的,但是后来问题出现了!由于WM_TIMER消息优先级比较低,常常被丢失,导致一个WM_MOUSEMOVE消息都会影响整个动画的效果。 这时我就考虑,是否能给定时器创建一个单独的线程,接着就发现了“多媒体定时器”这个东西。它是一个高精确度定时器,一般的Windows定时器只能转载 2015-12-21 15:22:03 · 1328 阅读 · 0 评论 -
正确使用std::auto_ptr
1, auto_ptr类auto_ptr是一个模板类,定义如下:template typename Type>class auto_ptr {...};它存储的是一个指向Type的指针。顾名思义,auto_ptr是一种智能指针,它包含一个动态分配内存的指针,并在它生命周期结束的时候,销毁包含的指针所指向的内存。例1:转载 2015-12-03 08:59:12 · 669 阅读 · 0 评论 -
boost::enable_if与SFINAE原则
模板函数的重载遵循SFINAE原则(substitution-failure-is-not-an-error):当一个模板函数的返回值或参数类型无效的时候,该实例不会参与重载解析,也不会导致编译错误。利用这个原则,可以设计出具有选择性的模板函数。先看一个例子:int negate(int i) { return -i; }转载 2015-12-02 15:42:41 · 1422 阅读 · 0 评论 -
C++新特性:deprecated关键字
对大多数程序员来说,代码陈旧是个大问题。这个新属性提供了解决这个问题的系统方法。在C++14中,增加关键字:deprecated,主要用于管理过时的函数、接口、类等。它的用法方便又简单—只需要把[[deprecated]]标签放到声明的前面即可—可以是类,变量,函数,或者其他一些实体的声明。结果看起来像这样:class[[deprecated]] fla原创 2015-12-02 16:11:05 · 15066 阅读 · 0 评论 -
STL remove和erase
remove 算法描述:查找的得到第一个元素的位置,然后从此位置开始遍历容器,将后面的元素依次前移,跳过和value相同值的元素,也就是说,所有和value相同值的元素都会被覆盖,而其他的元素都会依次前移。最后remove返回"指向最后一个 '有用' 元素的iterator",但是在remove算法过程中,并没有修改原容器的size,以及end()。但是从逻辑角度看,最后的[转载 2015-12-02 14:44:37 · 612 阅读 · 0 评论 -
C++: std::string 与 Unicode 如何结合?
C++: std::string 与 Unicode 如何结合? 一旦知道 TCHAR 和_T 是如何工作的,那么这个问题很简单。基本思想是 TCHAR 要么是char,要么是 wchar_t,这取决于_UNICODE 的值: 1: // abridged from tchar.h 2: 3: #ifdef _UNICODE 4: 5: typ转载 2016-01-19 17:58:57 · 4795 阅读 · 0 评论 -
串口通信编程--多线程异步方式
目录一串口通信基础 1.1串口通信原理与特点 1.2串口通信的传输方式 1.3串口通信的同步技术 1.4串行接口标准 二 API函数实现串口通信 2.1打开串口 2.1.1串口是否有驱动 2.1.2连接串口 2.1.3串口逻辑端口号大于10无法打开问题 2.2串口配置 2.2.1设置缓冲区大小转载 2016-08-26 09:22:25 · 1713 阅读 · 0 评论 -
注册表编程
一、注册表基础1.1注册表历史背景什么是注册表?我们可以把注册表理解成一种数据库,里面保存着各种数据,如:系统的配置信息,桌面环境,系统软件,IE浏览器等等软件的信息。在微软以前发布的操作系统中(如windows 3.X),把这些信息保存在System.ini,Win.ini等文件中,随着数据量越来越大,越来越复杂,这样ini文件难以胜任,从windows 95开始引入注册表来保存这些复杂转载 2016-08-26 09:30:34 · 591 阅读 · 0 评论 -
判断点是否在多边型内
最近不断遇到类似的几何位置问题,一直没有花时间去总结,本文总结了我常用点跟多边形的位置判断方法以及代码。希望能够对大家有所帮助。文中所指的多边形均为凸多边形,一些描述可能有误,欢迎指正。1.测试的多边形在开始之前,我们需要先构建好测试环境。我构建了一个比较特殊的多边形,如下。/ \| ||_|从最上面的顶点顺时针坐标(屏幕坐标系)分转载 2016-08-26 09:32:25 · 801 阅读 · 0 评论 -
#pragma pack 用法详解
pack 为 struct, union 和 class 等的成员对齐指定字节边界. 与编译选项(属性 -> 配置属性 -> C/C++ ->代码生成 -> 结构成员对齐)的 /Zp 开关不同, 它不针对整个项目, 而仅针对模块, 比如一个编译单元. 1. #pragma pack(show) 以警告信息的形式显示当前字节对齐的值.2. #pragma pack(n)转载 2017-07-20 10:17:55 · 2059 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(12):Boost.Signals
Boost.Signals信号和接收系统,基于称为publisher-subscriber 和 observer的模式,它是在一个最小相关性系统中管理事件的重要工具。很少有大型应用软件不采用这种强大设计模式的某种变形,尽管他们有各自的实现方式。Signals提供了一个已验证的、高效的手段,将信号(events/subjects)的发生和这些信号要通知的接收者(subscribers/obs原创 2016-10-19 16:31:26 · 2580 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(11):Boost.Function
Boost.FunctionFunction库实现了一个泛型的回调机制。它提供了函数指针、函数对象和成员函数指针的存储和后续的调用。当然,它与binder库,如 Boost.Bind 和 Boost.Lambda一起工作,大大提高了回调(包括带态度的回调函数)的使用机会。Function常用于需要把函数指针用于回调的地方。例如:信号/接收者的实现,GUI与业务逻辑的分离,以及在标准库容器中原创 2016-10-19 16:18:45 · 2649 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(10):Boost.Lambda
Boost.LambdaLambda为C++提供lambda表达式及无名函数。在使用标准库算法时特别好用,Lambda允许函数在呼叫点创建,避免了创建多个小的函数对象。使用lambdas意味着更少的代码,在哪需要就在哪写,这比分散在代码各处的函数对象更清晰、更好维护。Lambda 库如何改进你的程序?对函数和函数对象进行适配,使之可用于标准库算法绑定参数到函数调用将原创 2016-10-19 16:02:19 · 2312 阅读 · 1 评论 -
C++“准”标准库Boost学习指南(9):Boost.Bind
Boost.BindBind是对标准库的绑定器bind1st 和 bind2nd的泛化。这个库支持使用统一的语法将参数绑定到任何类似于函数行为的东西,如函数指针、函数对象,以及成员函数指针。它还可以通过嵌套绑定器实现函数组合。这个库不要求那些对标准库绑定器的强制约束,最显著的就是不要求你的类提供typedefs result_type, first_argument_type, 和 sec原创 2016-10-19 15:26:46 · 1822 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(8):Boost.Tuple
Boost.Tuple在标准C++中有Pairs(类模板 std::pair), 但它不支持n-tuples。用Tuple.不象用structs 或 classes 来定义n-tuples, 这个类模板支持直接声明和使用,如函数返回类型或参数,并提供一个泛型的方法来访问tuple的元素。Tuple已经被即将发布的Library Technical Report所接受。Tuple 库原创 2016-10-19 15:06:10 · 2290 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(7):Boost.Variant
Boost.VariantVariant库包含一个不同于union的泛型类,用于在存储和操作来自于不同类型的对象。这个库的一个特点是支持类型安全的访问,减少了不同数据类型的类型转换代码的共同问题。Variant 库如何改进你的程序?对用户指定的多种类型的进行类型安全的存储和取回在标准库容器中存储不同类型的方法变量访问的编译期检查高效的、基于栈的变量存储原创 2016-10-19 14:52:33 · 1871 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(6):Boost.Any
Boost.AnyAny库支持类型安全地存储和获取任意类型的值。当你需要一个可变的类型时,有三种可能的解决方案:无限制的类型,如 void*. 这种方法不可能是类型安全的,应该象逃避灾难一样避免它。可变的类型,即支持多种类型的存储和获取的类型。支持转换的类型,如字符串类型与整数类型之间的转换。Any实现了第二种方案,一个基于值的可变化的类型,无限可能的类型。这个原创 2016-10-19 14:42:34 · 2318 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(5):正则表达式库 Boost.Regex
Boost.Regex正则表达式是解决大量模式匹配问题的基础。它们常用于处理大的字符串,子串模糊查找,按某种格式tokenize字符串,或者是基于某种规则修改字符串。由于C++没有提供正则表达式支持,使得有些用户被迫转向其它支持正则表达式的语言,如Perl, awk, 和 sed。Regex提供了高效和强大的正则表达式支持,基于与STL同样的前提而设计,这使得它很容易使用。Regex已被即原创 2016-10-19 14:10:08 · 1669 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(4):Boost.Operators
Boost.Operators Operators库提供了相关操作符及概念(LessThanComparable, Arithmetic,等等)的实现。定义一个类型的操作符时,保证所有操作符都有定义是一件乏味并容易出错的工作。例如,你提供了operator, 和 operator>= 。Operators可以根据给定类型的最小的用户自定义操作符集合,自动声明并定义其它所有的相关操作符。原创 2016-10-19 13:58:50 · 3399 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(3):Boost.Utility
Boost.Utility一些本不应在一个库里出现的有用的东西,只是因为它们每个都不太复杂和广泛,不足够形成一个单独的库。但不是说它们没有什么用外;事实上小的工具通常都有最广泛的用处。在Boost, 这些小工具被集中起来,形成一个称为Utility的库。你可以在这找到checked_delete, 一个函数,用于确认在删除点的类型是完整的;还有类noncopyable,用于确保类不能被复制原创 2016-10-19 13:42:17 · 1545 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(2):Boost.Conversion
Conversion库包含有一些函数,它们是现有的强制类型转换操作符(static_cast, const_cast, 和 dynamic_cast)的增强。Conversion为安全的多态转换增加了 polymorphic_cast 和 polymorphic_downcast,为安全的数字类型转换增加了 numeric_cast,为文本转换(如string 和 double间的转换)增加 le原创 2016-10-19 13:17:33 · 1483 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(1):智能指针Boost.smart_ptr
我们学习C++都知道智能指针,例如STL中的std::auto_ptr,但是为什么要使用智能指针,使用它能带给我们什么好处呢?最简单的使用智能指针可以不会因为忘记delete指针而造成内存泄露。还有如果我们开发或者使用第三方的lib中的某些函数需要返回指针,这样的返回的指针被client使用的时候,lib就会失去对返回的指针的控制,这样delete的指针的任务一般就会交给调用方client原创 2016-10-19 11:48:37 · 2025 阅读 · 0 评论 -
VS2010远程调试环境详细配置(Windows用户验证)
远程调试说明:Windows远程调试有两种连接方式:无验证,Windows用户验证。两种调试方式:Attach to process, 直接调试。这里介绍的是Windows用户验证下的直接调试方式。1、首先说明准备工作:(1)关闭两台机器防火墙。(2)两台机器在同一局域网之内,并且需要相互可以ping通。(3)由于是使用Windows验证方式,所以要求两台机转载 2016-10-14 09:45:54 · 4484 阅读 · 0 评论 -
VS2010远程调试环境配置详解
VS2010远程调试环境配置详细讲解: 阅览下文之前,请看相关符号说明:1. A 代表本地机,即就是研发机 (以下示例为Win764位)2. B 代表远程机,即就是客户机 (以下示例为WinXp32位)3. (###) 括号中的内容为命令顺序 【1】具体步骤(1)在A机上(运行—cmd-ipconfig)获取A机的ipA(p转载 2016-10-14 09:36:48 · 3184 阅读 · 0 评论 -
等待光标的两种实现方式
有时候在做烦琐的工作时,希望鼠标处于忙状态,有两种简单的方法来实现1.采用ApI函数,大多数采用此方法:BeginWaitCursor();.....处理......EndWaitCursor();该方法这两个函数必须配对使用,并注意处理中提前退出的处理情况,可能一个BeginWaitCursor()函数要对应多个EndWaitCursor();函数。2.采原创 2016-10-13 17:18:51 · 2167 阅读 · 0 评论 -
判断一个点是否在多边形区域内
/*函数的输入:(1)当前点的坐标p(2)区域顶点数组pt[];(3)顶点数nCount 输出: 在区域内返回TRUE,否则返回FALSE。 Point类型是一个结构: struct Point { 类型 x;//此处类型根据采用的经纬度类型决定。 类型 y; };*/BOOL PtInPolygon(Point p, Poin转载 2016-08-26 09:34:50 · 809 阅读 · 0 评论 -
内存分配及清空、调试 几种方法的总结
1. 存分配的三个方法:(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(3)转载 2016-01-19 17:56:23 · 8070 阅读 · 0 评论 -
获得MFC窗口其它类指针的方法
获得CWinApp:-在CMainFrame,CChildFrame,CDocument,CView中直接调用AfxGetApp()或用theApp-在其它类中只能用AfxGetApp()获得CMainFrame:-在CMinApp中用AfxGetMainWnd()或者m_pMainWnd-在CChildFrame中可用GetParentFrame()-在其它类中用AfxG原创 2015-12-16 17:42:32 · 873 阅读 · 0 评论