语言基础、数据结构与算法
所有基础知识的学习和研究
彻底解密C++宽字符:6、国际化策略(完)
摘要: 硬编码的硬伤——补救——Windows的策略——Linux的策略——跨平台策略——gettext策略——更多
阅读全文
posted @
2010-06-26 19:55 lf426 阅读(3524) |
评论 (4) 编辑
彻底解密C++宽字符:5、利用fstream转换
摘要: C++的流和本地化策略集——basic_filebuf——利用fstream实现宽窄转换
阅读全文
posted @
2010-06-26 16:40 lf426 阅读(3075) |
评论 (0) 编辑
彻底解密C++宽字符:4、利用codecvt和use_facet转换
摘要: locale和facet——codecvt——内部编码和外部编码——CodecvtFacet的in()和out()——演示程序源代码——use_facet
阅读全文
posted @
2010-06-26 13:39 lf426 阅读(8724) |
评论 (2) 编辑
彻底解密C++宽字符:3、利用C运行时库函数转换
摘要: std::locale——mbstowcs()和wcstombs()——宽窄转换函数:string和wstring之间的转换。
阅读全文
posted @
2010-06-26 11:17 lf426 阅读(2959) |
评论 (1) 编辑
彻底解密C++宽字符:2、Unicode和UTF
摘要: Unicode和UCS——Unicode和UTF——UTF-8和Windows GB2312——UTF-16和UCS-2——UTF-32和UCS-4——BOM
阅读全文
posted @
2010-06-25 21:51 lf426 阅读(3575) |
评论 (1) 编辑
彻底解密C++宽字符:1、从char到wchar_t
摘要: 从字符到整数——本地化策略集(locale)——C/C++的编译策略——宽字符 wchar_t
阅读全文
posted @
2010-06-25 14:41 lf426 阅读(21025) |
评论 (6) 编辑
迭代器(iterator)“擦”(erase)出的错误
摘要: 在我们遍历查找对等值的循环中,一开始v.end()指向第10个元素(数值为9)的后面一个位置(不存在的第11个元素的位置)。当迭代器指向第10个元素(数值为9)的时候,v.erase()生效运行;下一轮循环中,迭代器本来应该指向第11个元素的位置,并且等于v.end()并结束循环。但是,因为我们擦掉了vector中的一个元素,v.end()指向的是现在的最后一个元素——第9个元素的后面,也就是第10个元素的位置。这样,迭代器到了11,而判断确是其是否到10,这将永远无法实现,形成了一个逻辑bug,所以系统抛出错误了。
阅读全文
posted @
2010-06-10 11:03 lf426 阅读(1656) |
评论 (1) 编辑
用对象的成员函数引出线程,还是在线程中创建对象?
摘要: 所以,如果我们设想构造一个类,这个类的对象可以调用包含this的线程,那么这个对象一定不能是局部变量,或者说,我们必须在循环的{}对之前先把这些对象构造出来。或者说,如果我们希望用类来封装线程,那么这些可以调用线程的对象必须是全局的。
阅读全文
posted @
2010-06-05 21:06 lf426 阅读(782) |
评论 (0) 编辑
在多线程中抛出的异常出错?
摘要: 所以,一个解决方法是,凡是遇到新的线程,必须在新线程中重新写异常处理。不然,就如google代码标准里所说的那样,不使用C++的异常机制。毕竟C++没有定义多线程的标准,所以也就无从说起多线程中异常处理的标准。
阅读全文
posted @
2010-06-05 20:16 lf426 阅读(2620) |
评论 (2) 编辑
函数指针与成员函数指针
摘要: 因为他们通常调用的是函数指针,但是在C++中,我们通常把函数绑定到了与其数据相关的类中,也就是说,我们在C++中很少用到“单身”的函数,成员函数可以被那些调用函数指针的函数调用吗?
阅读全文
posted @
2008-04-26 12:39 lf426 阅读(3954) |
评论 (0) 编辑
成员数据的三种形式与栈对象的生命周期
摘要: 结论是:如果成员数据使用(新)对象,则必须定义这个对象所属类的复制构造函数;如果使用的是对象引用或者指针,则一定只能用已经存在并且会在B对象整个生命周期内都存在的A对象来构造这个B对象。
阅读全文
posted @
2008-04-14 12:36 lf426 阅读(502) |
评论 (0) 编辑
创建一次销毁两次?!复制构造函数的致命错误。
摘要: 所以,结论是,如果A类构造具有堆操作,有可能把A类作为B类的成员数据,B类又有可能通过成员初始化列表构造A对象,请一定别忘记手写复制构造函数。
阅读全文
posted @
2008-04-14 11:50 lf426 阅读(523) |
评论 (0) 编辑
显式析构函数的陷阱
摘要: 几乎在大部分时候,我们是不需要显式的调用析构函数的。显式的调用析构函数是一件非常危险的事情,因为如果系统会调用析构函数,无论我们自己是否已经调用过,仍然会再次调用。换句话说,我们自己所谓的显式调用析构函数,实际上只是调用了一个成员函数,并没有真正意义上的让对象“析构”。
阅读全文
posted @
2008-04-12 14:29 lf426 阅读(2473) |
评论 (1) 编辑
SDL入门教程(九):4、int转换为std::string
摘要: 我下面考虑的问题,是用TextSurface反馈鼠标事件的信息。我想到的第一个例子,很自然就是反馈鼠标所在坐标的位置。这里涉及到一个基础的问题,即鼠标位置显然不是用字符串表示的。SDL给我们的反馈信息是int,我们需要用TextSurface将int构建成可以被blit到ScreenSurface上的面,需要做的第一件事情,是将int转换为string。
阅读全文
posted @
2008-03-26 20:48 lf426 阅读(4261) |
评论 (8) 编辑
从“集合”实例分析修饰函数返回值的const作用
摘要: 发现这个问题,是因为一直以来思考的一个算法——关于“集合”的实现。这个集合就是数学中的集合,与计算机中数列一个最大的不同在于,集合的元素是互异的。因为这两天在熟悉vector,所以觉得用vector实现集合再合适不过了。STL确实是很好很强大的体系,无论是内存管理,还是链表的实现,让我们可以省很多心。其实关于为什么要实现集合,也是因为我在计划实现类似英雄无敌战场计算移动的一系列算法中,很多地方会用到集合的概念,甚至包括并集和差集等等。
阅读全文
posted @
2008-03-13 13:30 lf426 阅读(912) |
评论 (3) 编辑
Full 语言基础、数据结构与算法 Archive