November 14, 2005
没想到C++ connections conference 在Las Vegas的Mandalay Bay酒店召开,那可是豪华赌场+豪华酒店啊,上次去Las Vegas的时候还留了好多拉斯维加斯照片
得到一份conference的CD,这里共享出来。里面有Scott Meyers(Effective C++/Effective STL的作者), Matt Austern(Generic Programming and the STL 的作者), Bjarne Stroustrup(C++之父)的演讲。不容错过。
令我出乎意料的是,这次会议大部分内容都是在介绍C++的标准库以及C++范型编程,以往很火的OOP内容已经少之又少。如果你看不懂这种风格的代码:
tr1::function < void(const record_set&) > on_completion =
tr1::bind(tr1::mem_fn(&grid::display_data), this, _1);
你有可能快落伍了。
看看这些链接吧:
C++ Connectiions Conference CD
C++ Connection Home Page
October 31, 2005
STLChina.org上新增两个栏目:
1 STL 英文技术文章。提供丰富的STL技术文章的英文原文
2 STL 资料下载中心 Winter收集了一些电子书,你可以任意下载。不过目前还在完善之中。你有好的电子书,也可以提供给Winter,然后share给大家。
September 23, 2005
STL 封装了许多复杂的数据结构,最典型的就是二叉树。因此,map得到许多应用,但有许多人并不知道还有hash_map, 或者hash_set 等。在某些时候,这些非标准的容器,说不定会帮你解决很多问题。
本文详细介绍了hash_map的使用以及和map的区别,对于初学者和希望深入研究STL的朋友都有所帮助,也是《详细解说STL系列》中很重要一部分。
以下是目录:
0 为什么需要hash_map
1 数据结构:hash_map原理
2 hash_map 使用
2.1 一个简单实例
2.2 hash_map 的hash函数
2.3 hash_map 的比较函数
2.4 hash_map 函数
3 相关hash容器
4 其他
4.1 hash_map和map的区别在哪里?
4.2 什么时候需要用hash_map,什么时候需要用map?
4.3 如何在hash_map中加入自己定义的类型?
4.4如何用hash_map替换程序中已有的map容器?
4.5为什么hash_map不是标准的?
4.6 有学习使用hash_map的建议吗?
5 参考文章:
详细查看: 详细解说STL hash_map系列
August 18, 2005
今天STL论坛上有个朋友问关于bind2st使用的问题,开始以为很简单:
void print(int& a,const int b)
{
a+=b;
}
int main()
{
list<int> my_list;
.........
for_each(my_list.begin(),my_list.end(), bind2nd(print,3) );
}
目的是依次循环,每个节点加3
想通过bind2nd使函数的第二个值绑定为3
可是通过不了,这是错在哪
如果要达到目的的话,应该怎么改呢??
后来一调试,发现不是那么容易。你能发现问题在哪儿吗?
详细阅读 "bind2st for_each 和 transform"
July 20, 2005
本文来自STL中文站
大约每隔十年,都会出现一个编程新概念,宣布自己是以往概念的继承者。我们也再一次相信,从今往后软件比以前更可靠,更容易build,或者更有意思(没有人相信它会比以前更小或者更快)。在70年代,有结构编程;在80年代,开始了面向对象编程;从90年代中期,出现了范型编程(generic programming)。范型编程得名于其用模板而使代码重用的高效技术(范型类和范型函数)。
模板类和模板函数都是非常有用的工具。例如sqr()函数可以计算平方数,任何定义了乘法运算的数据类型(数字,矩阵)都适用。标准容器类(如 list)都是模板,这样对于每个新类型无需重写了,这正是使用旧版的C++时真正头疼的事情,因此我认为ISO的标准是个伟大的进步。然而,在这个过程中有些东西用得过头了。
详细查看:过度使用C++模板
July 13, 2005
C++ 语言是个十分优秀的语言,但优秀并不表示完美。还是有许多人不愿意使用C或者C++,为什么?原因众多,其中之一就是C/C++的文本处理功能太麻烦,用起来很不方便。以前没有接触过其他语言时,每当别人这么说,我总是不屑一顾,认为他们根本就没有领会C++的精华,或者不太懂C++,现在我接触 perl, php, 和Shell脚本以后,开始理解了以前为什么有人说C++文本处理不方便了。
本文讲述了string在STL中的作用,详细介绍了STL string的用法,并讲解如何定义char_traits结构,最后提出了关于使用STL string的建议以及string类的所有函数列表。
详细查看: 详细解说STL string
July 02, 2005
本文来自STL中文站
对于程序员来说,数据结构是必修的一门课。从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来。幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性。不过,等你开始应用计算机语言来工作的时候,你会发现,面对不同的需求你需要一次又一次去用代码重复实现这些已经成熟的算法,而且会一次又一次陷入一些由于自己疏忽而产生的bug中。这时,你想找一种工具,已经帮你实现这些功能,你想怎么用就怎么用,同时不影响性能。你需要的就是STL, 标准模板库!
西方有句谚语:不要重复发明轮子!
STL几乎封装了所有的数据结构中的算法,从链表到队列,从向量到堆栈,对hash到二叉树,从搜索到排序,从增加到删除......可以说,如果你理解了STL,你会发现你已不用拘泥于算法本身,从而站在巨人的肩膀上去考虑更高级的应用。
详细查看 详细解说 STL 排序(Sort)
经过一个多月的忙碌,今天终于让STLChina --STL中文站开通了。之所以要建设这个网站,很大一部分原因在于在winterxy.com这个域名实在和Winter看起来太像了,本来只是想搞一个小的blog,后来发现有很多朋友支持,特别是STL论坛开通以后, 觉得自己能够为大家提供一个交流沟通的平台而感到高兴。
许多人做事情开始的时候热情很高,慢慢会淡漠,可能我也不例外。开始从Blog的安装,到TWiki安装,以及TWiki语法熟悉,以及BBS的问题,不过现在都差不多了,框架都已经搭好,我知道,更重要的是内容,如果能有丰富而且有用的内容,会有更多的人参与。我会希望更多的朋友一起参与,而且我也会坚持下去。希望大家继续支持,也希望和大家一起进步!
祝贺STL中文站正式开通!
June 09, 2005
最近在组织几个朋友一起翻译
. 翻译并不是一件容易的事情,虽然英文看懂了,但是不一定能翻译的合适。幸好并不是让我们出书,有点错误也没有关系。有兴趣的可以参看在论坛中的讨论:http://stlbbs.winterxy.com
April 27, 2005
April 21, 2005
April 20, 2005
April 05, 2005
April 03, 2005
非常感谢许多朋友的支持,最新开通STL交流论坛,以后大家可以在论坛中直接交流,论坛目前有STL新手上路和STL学习交流,以后会有更多的栏目,欢迎大家灌水:).
由于我的MSN和QQ不会一直在线,因此许多朋友问我的问题以后可以直接在论坛中交流,我会尽快解答,另外也希望热心的大虾们申请成为斑竹,一起来营造最好的STL学习交流论坛。
论坛地址:STL交流论坛
March 30, 2005
March 18, 2005
March 16, 2005
本文来源于MSDN中文站
大多数 C++ 开发人员在他们的代码中都广泛使用了标准模块库 (STL)。如果您是其中的一员,并且正在直接使用即装即用的 STL 和 Visual C++ 6.0,则在内存不足的条件下,您的应用程序就处于崩溃的高度危险的状况下。产生此问题的原因是,检查运算符 new 是否失败是一种非常少见的做法。更糟糕的是,当 new 确实失败时,响应不是标准的。有些语言编译器返回 NULL,而其他语言则引发异常。
详细阅读 "VC6下使用STL注意:不要让内存分配失败导致您的旧版 STL 应用程序崩溃"
March 13, 2005
March 04, 2005
本文说明了vector 容器使用时应该注意的内存分配问题,原理说的比较详细,对于初学者比较适用。
本文描述的是一种很常见的情况:当你在某个缓存中存储数据时,常常需要在运行时调整该缓存的大小,以便能容纳更多的数据。本文将讨论如何使用 STL 的 vector 进行内存的再分配。
详细阅读 "C++ STL中用vector 改进内存的再分配"