自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

btwsmile's blog

Try to be somebody

  • 博客(60)
  • 资源 (1)
  • 收藏
  • 关注

原创 一道微策略校招笔试题

MicroStrategy的题目出得真心有水平,下面是其中一道。判断一棵二叉树是否为二叉搜索树(binary search tree),二叉搜索树满足下列条件:1. 根节点的值(key)比它的左子树所有节点的值都要大,比它的右子树所有节点的值都要小;2. 左子树和右子树也都是二叉搜索树;3. 不存在重复节点。显然二叉搜索树的中序遍历结果正好是递增序列。假设中序遍历前一个节点的值

2013-10-16 21:19:27 1793

原创 一道百度校招笔试题

要求是编码实现htons方法,将整数转换成适合传输的网络字节序。这道题要考虑几个要点:1. htons的签名式是怎样的?2. 如何用C语言实现?第一个问题考察你对socket编程是否了解,因为htons是Win socket库函数,专门用来转换字节序。实际上,htons是常用的转换函数之一,其它还有htonl、ntohs、ntohl等。函数名中h即host,n即network,s即

2013-10-15 19:50:14 1422

原创 C++文件流ios::binary的作用

在创建文件流时,可以显示指定它的打开方式为ios::binary,也就是以二进制方式打开。但是,无论是否指定二进制方式打开文件,读写的最小单位都是字节。那么,它到底起到什么作用呢?以二进制方式打开与普通打开方式的区别是什么?实际上,二者最大的区别在于对换行符的处理方式不同。由于历史原因,Windows操作系统是用两个字符(\r\n)来表示换行符的;而Unix操作系统却是用单个字符(\n)来表示

2013-09-23 12:08:26 13976 1

原创 C++流操作之fstream

在Windows平台对文件进行存取操作可选的方案有很多,如果采用纯C,则需要用到File*等,当然也可以直接调用Windows API来做;如果采用C++,首先想到的就是文件流fstream。虽然在COM层面上,我们还可以使用IStream来实现文件的读写,其效率也非常高。不过本文仅对C++流操作做简单的探讨,相比于Windows API或IStream,C++的流操作通用性更好一些,因为你能轻松

2013-09-16 16:11:11 2038

原创 光标闪烁问题的解决办法

在调用Windows API函数SetCursor设置光标时,可能会碰到闪烁的问题:移动鼠标,光标在Class Cursor(即注册窗口类时指定的Cursor)与预设Cursor之间闪烁。在MSDN上有关SetCursor函数的备注中强调,如果Class Cursor非空,那么每当鼠标移动,系统都会把光标恢复为Class Cursor。为了避免光标闪烁这一问题,必须处理WM_SETCURSOR

2013-07-04 16:04:54 6468 2

原创 POJ1013 Counterfeit Dollar 解题报告

题目描述http://poj.org/problem?id=1013有12枚硬币(标记为A-L),其中有1枚是假币,但不知道假币比真币更轻或更重。Sally借助于天平,设计出一种方案,可以恰好三次测量出谁是假币、比真币更轻或更重。要求你帮助Sally,根据她的测量数据,计算出谁是假币、比真币更轻还是更重。例如一组测量数据为:ABCD EFGH even ABCI EFJK up

2012-12-27 11:30:07 1276

原创 POJ1009 Edge Detection 解题报告

http://poj.org/problem?id=1009主要解决三问题1. 图像的存储输入采用的是RLE编码,存储也采用类似的方式,但要做点变换。比如输入715 4100 1525 2175 225 5175 225 50 0经过变换,得到715 4100 1925 21175 2325 28175 3025

2012-12-20 11:11:19 1379

原创 Max Subsequence Sum 最大子序列和问题 O(NlogN)与O(N)算法的对比

《数据结构与算法分析》里用Max Subsequence Sum作为例子,介绍了算法分析的基本方法。书上提出了4种解决Max Subsequence Sum问题的算法,算法效率各不相同:O(N^3)、O(N^2)、O(NlogN)以及O(N)。后面两种算法很讨巧,特别是O(N)算法。O(NlogN)算法的思路:采用divide and conquer的方法,将序列平分为两部分,分别计算每部分的

2012-12-06 21:11:13 2038 1

原创 标准滚动栏msdn示例简化版

滚动栏是Windows中重要的UI元素,它有两种类型:标准滚动栏、滚动栏控制。二者比较起来,标准滚动栏简单但功能有限制。它只在窗口客户区的边界上,作为窗口的一个部分不含有独立的窗口句柄,消息由所在窗口的WndProc处理。滚动栏控制功能更强大一点,相对复杂一些。它可以在窗口的任何地方,是独立的子窗口有自己的窗口句柄,消息由自己处理。本文的目的是展示滚动栏的消息处理方法,不涉及复杂的应用,所以例

2012-12-04 16:58:04 1130

原创 Visual Studio 2010编辑错误修复

启动Visual Studio 2010,对源码进行编辑时,弹出一个错误提示窗口。关闭该提示窗口,虽然vs仍然可以继续使用,但IntelliSense等功能却没在起作用。按照提示,为Visual Studio 2010添加命令参数 /log后再运行。当错误重现,打开位于C:\Users\Heart\AppData\Roaming\Microsoft\VisualStudio\10.0\Acti

2012-11-23 21:00:48 2388

原创 探秘窗口过程函数(WndProc)的Thunk技术

最近看了一篇讲ATL Thunk技术的好文章(下载),收获较多,在此做一个总结。Thunk技术的由来我们知道,经典的Windows程序设计采用纯Windows API来实现,创建一个窗口必须严格遵循“定义窗口类,注册窗口类,创建窗口,显示窗口,更新窗口,启动消息循环”的步骤。虽然经典的Windows程序设计在一定程度上已经体现出了OOP的思想 (对象 = 数据 + 代码),但是与当代的OO

2012-11-17 15:32:18 3637 2

原创 编程让任务管理器中CPU占有率呈现正弦曲线

《编程之美》的第一个问题:如何编程让任务管理器中CPU占有率呈现正弦曲线,博主尝试了一下,得到如图的结果。博主写出的代码如下所示:#include #include #include #include const double PI = 3.1415926;const int FREQUENCY = 360;const int AMPLITUDE = 100;int

2012-11-05 20:46:29 2069

转载 使用const提高函数的健壮性

看到const关键字,C++程序员首先想到的可能是const常量。这可不是良好的条件反射。如果只知道用const定义常量,那么相当于把火药仅用于制作鞭炮。const更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const是constant的缩写,“恒定不变”的意思。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C++程序设计书籍建议:“Us

2012-09-24 09:25:47 1172

原创 关于#pragma push_macro("new")

在三方库源码中,我们经常看到这样的代码:#pragma push_macro("new")#undef new// do something with new......#pragma pop_macro("new")它的作用就是将宏定义new压入栈并取消它的定义,如此一来new的本来含义便获得了恢复,使用完毕后将宏定义new弹出栈,恢复宏定义。不过,仍有下面两个问题需

2012-09-13 21:32:22 9189

翻译 标准模板库STL简介

题   目:Introduction to the Standard Template Library原作者:SGI翻   译:btwsmile标准模板库(STL)是一个有关容器类、算法和迭代器的C++程序组件库,它提供了计算机科学领域内基础的算法和数据结构。STL是一个泛型库,这意味着它的组件被广泛的参数化,几乎每一个组件都用模板来实现。在使用STL之前,你必须首

2012-09-10 21:25:15 1133

转载 WTL::CString的一点缺陷及修改

前言         在以前我做过的一个使用了WTL的项目中碰到过一个很有趣的问题。我们先是做了一个原型版,是一个单独的EXE。后来将它分成了不同的模块,除了界面部分,其他模块都用DLL实现。在无界面的DLL模块中大量使用了WTL::CString类,因为这个实现比MFC的CString实现要快,功能也更加全面。  可是在集成的时候我们就发现很多跨DLL边界传递的WTL::CString对

2012-09-09 10:03:35 1640

原创 exit与return的区别

exit比return更加“暴力”,因为它将绕过临时变量、局部变量的析构方法。这意味着,对于那种需要清理堆内存的对象来说,这将引起内存泄漏。虽然程序运行后关闭,泄漏的内存会被OS收回,不过析构方法中有些善后操作或许是必需的,绕过它会带来一些麻烦,比如保存一些数据到文件。注意,exit绕过的仅仅是临时变量、局部变量的析构方法,全部变量、静态变量的析构方法仍然会被调用的。下面是一个例子://

2012-09-02 12:37:07 964

原创 VS源文件提取工具vsjuicer 实现细节

程序的主体框架如下列代码所示://by btwsmile#include "stdafx.h"#include "juice.h"// entryint _tmain(int argc, _TCHAR* argv[]){ CJuice juicer(argc, argv); juicer.Process(); return 0;}不难看出,真正进行处理的是CJuice

2012-09-01 15:37:58 1202

原创 VS源文件提取工具vsjuicer 下载及使用方法

在使用Visual studio 2010编写程序时,缺省情况下,解决方案目录下会生成数据库、预编译目标、目标文件等大量中间文件,但在存档或共享时,我们仅仅需要源文件。当然我们可以找到那些无用的文件,逐一进行删除,但对学习编程的人来说,本地磁盘中可能含有比较多VS解决方案,手工删除比较麻烦,很浪费时间。vsjuicer可以帮助你自动完成这个枯燥的操作。vsjuicer是博主在业余时间编写的小工

2012-09-01 14:11:33 1534 1

原创 Magic Coupon

The magic shop in Mars is offering some magic coupons.  Each coupon has an integer N printed on it, meaning that when you use this coupon with a product, you may get N times the value of that product

2012-08-21 11:05:15 1130

原创 《PicSi的实现细节》 第4节 主窗口CMainDlg的定义及杂项

主窗口CMainDlg的定义很好理解,虽然简单但却至关重要,毕竟Creator子窗口、About子窗口都被主窗口管理,它就是PicSi的“领导”,对全局进行控制。       首先需定义3个控制成员变量m_tab、m_creator及m_about,分别对应主窗口中tab控制、Creator子窗口、About子窗口。       接着在OnInitDialog方法中初始化Tab控制,创建C

2012-08-17 17:42:17 2503

原创 《PicSi的实现细节》 第3节 窗口类CPicSiCreatorDlg的定义

这一节是本系列文章中最重要的部分,因为CPicsiCreatorDlg类是Main子窗口的实现类,它是PicSi的功能主体。有了第2节作为基础,相信大多数朋友对CPicSiCreatorDlg的主框架是不陌生的。因此,本节将重点阐述关键思路,而代码的实现细节不在文中说明了。我会在文章的末尾将所涉及的代码贴出,若理解过程中碰到什么问题或者疑问,可随时提出。      CPicsiCreatorD

2012-08-17 16:47:26 1485

原创 《PicSi的实现细节》 第2节 窗口类CAboutDlg的定义

为了把重点集中在窗口类的定义方法上,本节以较为简单的AboutDlg为例,阐述如何定义窗口类。在第一节中,我们已经在Resource View(资源视图)中添加了所需的窗口。在这里简单总结一下:向主窗口中添加Tab控制,用作菜单选项卡;添加IDD_DLG_CREATOR子窗口,作为Main子窗口;向IDD_ABOUTBOX子窗口添加了一个Edit控制,用来显示PicSi的使用说明,作为Abou

2012-08-10 10:05:09 1628

原创 《PicSi的实现细节》 第1节 界面的布局

PicSi是不久前博主利用业余时间编写的一个小工具软件,虽然它的功能十分简单,但却是一个小型软件开发的好例子。PicSi采用Visual Studio 2010 + WTL框架,代码总计700行左右。《PicSi的实现细节》一共分为四节,本文是第一节,希望它能给你带来一点帮助。如果你有任何想法或建议,请与博主联系,谢谢!1. Why WTL?    相比于MFC,WTL并不被人们熟知,它其

2012-07-30 09:59:35 1394

原创 《PicSi的实现细节》 第0节 下载方式及使用说明

单击此链接可下载PicSi。     PicSi是一个"内涵图"制作小工具。 所谓"内涵图",顾名思义就是在一张图片中"内涵"有其它信息(mp3, bt种子等)。PicSi的名字也源于此, Pic表示图片(Picture), Si表示Connotative(内涵)。    实际上,不使用PicSi,直接使用WinRar压缩软件和控制台copy命令也能制作出你想要的"内涵图"。 PicSi在

2012-07-26 21:35:10 1010

原创 感知this指针 人工传递this指针技巧

引入C++与C明显的不同之处就是C++对类(class)的支持,这也是C++最初被称作C with classes的原因。我们知道类是属性和行为的封装,它既包含成员变量,也包含成员函数(或称方法)。如果成员变量是私有的,外界则无法直接访问,而只能求助于该类的方法,因此外界与类成员的交流基本上被限制在调用类方法上。实际上,依据C++的编程思维,是应该鼓励这种交流方式的。在设计类的时候,应尽量将属

2012-05-16 11:14:09 1643

原创 万向节死锁 Gimbal Lock

万向节死锁 Gimbal Lock    在学习计算机动画课程的时候,书中提到固定角和欧拉角朝向表示法有一定的局限性,它们无法避免Gimbal Lock现象。在网络上搜集了很多有关Gimbal Lock有用的资料,对我很有帮助,在这里列出一个索引,以方便其他有需要的朋友查看:1.维基百科:http://en.wikipedia.org/wiki/Gimbal_lock   首先有必要理

2012-02-22 22:28:47 4061 2

原创 HRESULT的秘密

长时间进行Windows编程的人一定对HRESULT特别熟悉,因为HRESULT作为一种函数的返回值类型曝光率实在太高了,可是你是否知道HRESULT到底是什么?为什么不直接使用简洁又亲切的BOOL作为函数的返回值类型呢?    单从名字上看,HRESULT似乎是指向函数结果的句柄,但是这种直观地猜想却是错误的。其实HRESULT的意义非常简单,它不是Handle to Result而是Her

2012-02-19 19:34:50 5244 4

原创 窥探迭代器(iterator)的真相

在前面的文章中,我们曾自定义了一个迭代器类line_iterator,不过它并不具有通用性。现在借助于模板,我们来定义一个模板化的迭代器。仍然延续线性查找的思路,首先将SimpleFind()函数改写成函数模板tFind(),代码如下所示:templateT* tFind(T* start, T* end, T val){ while(start != end && *start

2011-12-18 16:16:33 2178

原创 详解masm编译环境的搭建

首先下载Masm615以及textpad,建议使用textpad英文版,下面以TextPad 5.4为例,说明编译环境的搭建方法。安装好textpad之后,启动后的界面是这样的:一、类型过滤:支持*.asm文件格式点击Configure -> Preferecence....(如图1)打开设置面板,在左边的列表中选择FileNameFilter,增加对*.asm格式的支持(如图2)

2011-12-17 22:11:05 3179 1

原创 自定义一个简单的迭代器(line_iterator)

STL是容器、迭代器、算法三位一体的好东西,使用STL编写的程序看起来非常简洁。比如从cin输入若干字符串,每一字符串占一行,然后将这些字符串按字典序排序并输出到cout中,相关的代码如下所示:/* 迭代器的使用 * created: btwsmile * date: 2011-12-17 * */#include#include#include#include#includ

2011-12-17 15:54:47 5165 4

翻译 模板化继承、泛型继承、Veneers的概念解析

Veneers的概念相当简单,一个Veneer其实就是一个类模板,它拥有以下特征:         1)它从自己的主模板参数派生而来(常以public方式)         2)它不定义任何虚方法         3)它不定义任何非静态成员变量,也不定义虚拟析构方法         4)在2)和3)的基础上更进一步,相比于模板参数类,它并不会增加复合类的内存访问频率。

2011-12-03 17:36:42 1371

翻译 ATL: 理解窗口特征(Window Traits)

理解窗口特征         在创建一个ATL窗口对象时,窗口特征类提供了一种简单的方式来标准化窗口的风格。窗口特征被当成模板参数被CWindowImpl以及其它ATL窗口类所接受,从而在类的级别上为窗口提供缺省的窗口风格。         如果一个窗口实例的创建者没有在调用创建函数时显示提供窗口风格,你还是可以使用一个特征类来确保窗口在创建时采用的窗口风格准确无误。你甚至还可以确保该窗口

2011-11-30 21:16:16 1473

原创 函数指针vs函数对象

在C/C++中,我们可以将函数当作普通的变量传递给另外一个函数以便定制函数的功能。比如实现排序功能的函数sort(),我们既可以选择从小到大的顺序也可以选择从大到小的顺序,只要传递给sort()不同的比较函数就可以了。不过,C和C++的做法不一样,前者采用函数指针,而后者采用函数对象。相比而言,C++的做法更值得推崇,它在性能上、状态维护上比C的做法灵活很多。性能       对一个整型数

2011-11-23 10:50:49 2065

原创 计算机到底是什么

从听说计算机,到接触计算机,再到将计算机作为自己的专业,我一直在寻找一个问题的答案:计算机到底是什么?从感观上讲,计算机是神秘的,它能做到很多振奋人心的事情。深蓝计算机早在60年代就战胜了卡斯帕罗夫,一定程度上挑战了人类的智慧。之后又有终结者、骇客帝国一类的影视作品,让人感受了计算机无所不能的一面。虽然电影里的情节都是虚构的,但不可否认的是计算机已经被赋予生命,它在很多地方比人类还要聪明。

2011-10-26 16:45:55 1412 1

原创 剖析STL auto_ptr源码

文件memory中第848行 -  975行是auto_ptr的全部定义,如需查看源码请转看本文末尾的附录。auto_ptr的作用不必多说,它在拷贝构造和赋值操作时的“所有权”转移也被人熟知也不再赘述,本文主要是希望通过剖析STL auto_ptr的源码来透视auto_ptr定义背后的思想。auto_ptr作为比较简单的智能指针,需要处理5种指针行为,接下来我将分别对它们进行阐述。(1)

2011-09-25 16:30:14 1982

原创 理解智能指针(Smart Pointer)

智能指针(smart ponter)是一项十分巧妙的C++编程技术,现在已经发展得相当成熟,运用也相当广泛。你一定对STL中的auto_ptr、shared_ptr毫不陌生,它们就是智能指针的具体实现。本文并不会详解auto_ptr和shared_ptr的语法,你可以在MSDN中轻轻松松查到,本文将主要分析智能指针的意义以及运用auto_ptr和shared_ptr的注意事项。想一想那些没有智

2011-09-23 20:20:15 2413

原创 C++为什么难学

很多人第一次应聘C++程序员岗位的时候,会在自己的简历上写下“本人精通C++”,这往往将带来两个结果:一是在技术面的时候就被多个HR轮番鄙视;二是侥幸进入公司,却因此成为同事们几个礼拜的笑料。总之被笑话在所难免!也许有些夸张,不过 C++难学却是众所周知的事实,切不可随随便便用到“精通”这个字眼,这样只会显得自己无知。在博大精深的C++面前,我们那么渺小,没有一丁点儿值得骄傲的资本。我学C++

2011-09-20 22:04:12 5467 2

原创 可持续发展的程序设计

为什么很多程序被用户用了一次就扔掉?一方面在中国,软件基本上是不花钱的;另一个方面,用户往往只有单次的功能需求。不过,本文并非讨论如何避免这种事情发生,而是要站在程序员的角度去考虑另外一个类似的问题:很多我们曾经写过的代码被自己用了一次就扔掉。       代码“即用即抛”的习惯使我们开始一个新的项目就意味着白手起家,重头再来。实际上我们是希望自己的代码高度可重用的。写过的代码如果都能在此后的

2011-09-17 13:18:49 2749

原创 强制修改const char*类型的数据

C++是一门类型安全(type-safe)的编程语言,它对类型的检查是十分严格的。一个const char*类型的数据是不允许被修改的,如果程序违反了这条规定,编译器将毫不留情地提示错误,不让通过。作为程序员,须知道这样的限制是很有实际意义的,毕竟大多数情况下我们需要类型安全的代码。但是有的时候,我们真的需要修改const char*类型的数据,怎么办?没问题,C++同样也是一门相当灵活的编程语言

2011-09-13 22:14:22 3805 1

PicSi安装程序

内涵图制作工具,将一个jpg文件和被内涵的文件拖拽进窗口,一键生产内涵图。

2012-07-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除