C++
文章平均质量分 50
SeaWave
这个作者很懒,什么都没留下…
展开
-
Singleton
00001: #pragma once00002: templateclass T>00003: class Singleton {00004: public:00005: static T & getInstance(void) {00006: static T instance;00007: return instance;00008: }000原创 2006-01-23 10:18:00 · 1257 阅读 · 0 评论 -
库函数排序比较
linux: 运行在VMware workstation中的RedHat Windows: XP、VS2003。CRT qsort()linux: 1000mswindows: 718ms STL::sort()linux: 400mswindows: 359ms STL::stable_sort()linux: 600ms原创 2006-07-02 00:06:00 · 1753 阅读 · 0 评论 -
Windows错误代码转换为错误信息
在调用一个API函数以后,如果函数失败,通常可以紧接着调用另一个API函数“GetLastError”来返回一个错误代码,下面这个类可以根据Windows定义的错误代码,查找到用文字表示的错误信息:00001: #ifndef _YHB_SYSERROR_INCLUDED_00002: #define _YHB_SYSERROR_INCLUDED_00003: 00004: #include原创 2006-11-11 22:53:00 · 2972 阅读 · 0 评论 -
IP表搜索
最近一个项目,需要根据给定的IP地址,查出它的线路类型(电信、网通、铁通……),很明显,二分法的效率比线性搜索要高,虽然目前IP表只有300条记录,但是好的算法总是应该被使用的。抽象声明:class IpKind {public: virtual ~IpKind(void) {} virtual bool addItem(const unsigned ip, const uns原创 2006-08-06 14:07:00 · 1662 阅读 · 0 评论 -
为一个朋友的代码进行纠错
一位朋友刚开始接触SOCKET编程,给了一段代码请我帮忙看看,前面两个函数如下(注释是我加的):void CtransferDlg::OnBnClickedBtnStart() { SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_add原创 2006-08-18 23:30:00 · 2072 阅读 · 2 评论 -
变量名后面的空括号
今天随便地在群里提了一个简单的问题:一个拥有默认构造函数的类,当在栈上构造该类的一个实例时,变量名后面需不需要加一对空括号?得到的答案有三种: 不需要、也不能加空括号 要加空括号 可加可不加,效果一样很明显,只有第1种答案是正确的。如果紧接着追问下去:如果加了空括号,会有什么后果?编译器是报一个错误还是让它顺利通过编译?一些人认为加了空括号是语法错原创 2006-08-16 22:12:00 · 5727 阅读 · 0 评论 -
wifstream并不能理解UNICODE文本文件
今天在写一个小应用的时候,需要从一个UTF-16的文本文件中读入一个一个的宽字符,想当然的以为wifstream天生就能识别 Unicode,代码如下(utf16.txt是一个用记事本编辑并保存为utf16格式的文本文件)001 wifstream ifs("utf16.txt");002 for (;;) {003 wchar_t wc = ifs.get();00原创 2006-08-19 23:37:00 · 6719 阅读 · 0 评论 -
符号
下面这段代码,在给定的字符串中,查找是否有相邻的两个相同字符,如果有则返回真,否则返回假。但这段代码里有一个BUG。00001: bool foo(const std::string & str) {00002: for (size_t i=1; i=str.size()-1; ++i)00003: if (str[i]==str[i-1])00004:原创 2007-07-05 10:34:00 · 1403 阅读 · 0 评论 -
为什么std::string不提供到const char *的operator?
为什么std::string不提供到const char *的operator?原因很简单,隐式地转换到const char *,会使程序员容易失误。通不过编译的代码并不可怕,可怕的是编译正常,但逻辑完全错误,甚至一运行就崩溃。假定STL的string提供了const char *的operator:operator const char * () const { return c_str原创 2009-01-20 22:11:00 · 4749 阅读 · 3 评论 -
怎样正确构造一个auto_ptr?
一个auto_ptr该如何构造?如果你写std::auto_ptr foo = new Foo;会死得很惨,而且有两种死法。第一种死法温柔点,只是编译不过;第二种是编译正常,但运行时崩溃。具体会出现哪种死法,取决于你的编译器,比如用g++就是第一种,用VC是第二种。正确的构造方式应该是std::auto_ptr foo(new Foo)(或者从另一个auto_ptr来拷贝构造),上面提到的那种原创 2009-01-22 14:08:00 · 1559 阅读 · 3 评论 -
erase方法是否影响其它iterator?
有时候会有这么一种不太常见的需求:从一个map中删除所有符合某种条件的项目,而这种条件与map的key基本没啥关系。比如,一个存储学生花名册的map,key为学号(int),value为姓名(string),如果要按学号删除很容易,但如果需要删除该map中所有姓“张”的学生,就只能遍历它,逐一比较了。using namespace std;typedef map MAP;stati原创 2009-08-02 16:14:00 · 5057 阅读 · 3 评论 -
狗尾续貂:利用引用计数在多线程中安全释放资源
原文标题:IOCP中的socket错误和资源释放处理方法 原文作者:sodme原文地址:http://blog.csdn.net/sodme/archive/2006/04/17/666062.aspx原作者声明:本文可以不经作者同意任意转载、复制、传播,但任何对本文的引用均须保留本文的作者、出处及本行声明信息!谢谢! 本文是观大宝SODME的BLOG中文章有感,原文中提到了两种方法(对数据原创 2006-05-21 15:52:00 · 7098 阅读 · 3 评论 -
与封装性何干?
span.ref { background-color:#DDD; color:black; }p.h3 { font-family:宋体; font-weight:bold; font-size:12pt; border:none; }刚刚看到的一篇文章,关于C++的封装性(http://blog.csdn.net/ac1998/archive/2006/10/08/1326184.原创 2006-10-10 12:31:00 · 1523 阅读 · 0 评论 -
写段代码验证哥德巴赫猜想之三:重构和优化
前几天写的那段代码,其实有很多可以优化的地方,最简单的就是不用遍历整个素数数组,比方说,给定的偶数是100,则只需要从2至97这个素数范围来计算,97以上的素数(如101)就不需要参与计算了。这个思路需要从已知素数中找到最接近给定偶数的素数,又要用到二分法,所以先把二分法提炼成为一个模板类,以供重用:#pragma once// T: 容器中项目类型// CONTAINER:原创 2006-02-12 15:10:00 · 1504 阅读 · 0 评论 -
保存指针?还是副本?
今天测试一段新代码的时候,发现一个BUG,原因是同事写的一个类,在对其实例调用execute()方法之前,需要用pushParam()方法把类型为const char *的参数“压”给该对象。class Foo {public: void pushParam(const char *param); bool execute();};从类的行为上来说,我理所当然地认为pushPa原创 2006-03-21 21:16:00 · 1606 阅读 · 0 评论 -
从printf谈开去.........
这周六为系统捉虫,无意中搜索了整个工程,赫然发现无数个sprintf、wsprintf以及strcpy这类的函数遍布各个文件,吃惊之余细细查看,差点晕倒,虽然早就在公用头文件里把这些函数#undef掉了(#include ),但有的同事因为种种原因没有include这个公用头文件(虽然这个公用头文件是预编译头文件),所以就忽略了这些函数的危险性...一、危险指数五星的strcpy()str原创 2006-04-03 10:51:00 · 2319 阅读 · 1 评论 -
去掉空格
00001: /************************************************************************00002: helper00003: ************************************************************************/00004: templatebool ext原创 2006-09-06 17:00:00 · 1598 阅读 · 0 评论 -
过份的编译器
今天写代码时出现的一个笔误,被单元测试代码给揪了出来,但是我很奇怪为什么这种笔误没有被编译器发现,连一个警告都没有(VC7,四级警告)。 std::string filename("//foo");filename + //; //本意是想写成 filename += //;filename += "bar"; “filename + //”这句明显是没有意义的,因为表原创 2006-05-01 16:07:00 · 1600 阅读 · 1 评论 -
C++失去竞争力了吗?
网友“图灵评论”的一篇“C++失去竞争力了吗?《C/C++ Users Journal》停刊有感”(http://blog.csdn.net/turingbook/archive/2006/05/18/743389.aspx"),或者C++真的正走向衰退,就我个人而言,认为它因为如下几点而不可避免地走下坡路: 过于复杂。我认为这可是说是最复杂的一门语言了,初学者很难入门,当他们刚刚原创 2006-05-18 16:39:00 · 2576 阅读 · 2 评论 -
这也叫绝招?
div.ref{background-color:#FFE;border:1px solid #369;padding:1em;}今日CSDN的“精华”头条:C语言高效编程的四大绝招,看到第一个绝招就开始佩服CSDN的编辑们了。绝招一:方法A:通常的办法#define LEN 32char string1 [LEN];memset (string1,0,LEN);strcpy原创 2006-09-22 23:16:00 · 1803 阅读 · 3 评论 -
再谈线程基类(答王立卫兄)
(王立卫兄设计的线程基类原文地址:http://blog.csdn.net/wei801004/archive/2006/05/18/744341.aspx)在前一篇Trackback中,针对王兄设计的线程基类,提出了一些个人浅见,王兄后来回复道:“谢谢SeaWave提的意见,线程最好的终止方式是让线程执行完任务自己退出,而我们要做的就只是closehandle。还有就是static DWOR原创 2006-05-20 10:26:00 · 3241 阅读 · 1 评论 -
为什么C++不提供override这个关键字呀?
class Parent {public: virtual void foo(int i=0) { cout }};class Son : public Parent {public: virtual void foo() { cout }};C++里关于虚函数声明的语法,一直很让我很不舒服,一再提醒自己小心小心,结果今天还是出了问题。看原创 2006-05-22 14:58:00 · 3711 阅读 · 5 评论 -
废话少说
这是亲眼所见的一小段代码,读后感只有四个字:废话少说!// 在一个数组中,找到最大值并返回int maxStudent(int student[], size_t arraySize) { // 将最大值初始化为 -1 int maxValue = -1; // 遍历整个数组,查找最大值 for (size_t i=0; iarraySize; ++i) {原创 2006-10-04 20:47:00 · 1639 阅读 · 0 评论 -
从WinMain开始
本文应一个初学Windows程序设计的朋友而作。目录 抽象渗漏法则(摘自Joel) 针对Windows GUI编程的封装 只用API函数创建GUI程序 WinMain函数 登记自己的窗口类 创建主窗口 消息循环 完整的示例代码 一、抽象渗漏法则根据Joel的抽象渗漏法则,所有重大的抽原创 2006-10-18 00:08:00 · 49412 阅读 · 21 评论