使用点滴列表:

详细解说STL hash_map系列

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系列

bind2st for_each 和 transform

今天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
可是通过不了,这是错在哪
如果要达到目的的话,应该怎么改呢??

后来一调试,发现不是那么容易。 你能发现问题在哪儿吗?


详细解说 STL 排序(Sort)

本文来自STL中文站
对于程序员来说,数据结构是必修的一门课。从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来。幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性。不过,等你开始应用计算机语言来工作的时候,你会发现,面对不同的需求你需要一次又一次去用代码重复实现这些已经成熟的算法,而且会一次又一次陷入一些由于自己疏忽而产生的bug中。这时,你想找一种工具,已经帮你实现这些功能,你想怎么用就怎么用,同时不影响性能。你需要的就是STL, 标准模板库!

西方有句谚语:不要重复发明轮子!

STL几乎封装了所有的数据结构中的算法,从链表到队列,从向量到堆栈,对hash到二叉树,从搜索到排序,从增加到删除......可以说,如果你理解了STL,你会发现你已不用拘泥于算法本身,从而站在巨人的肩膀上去考虑更高级的应用。

详细查看 详细解说 STL 排序(Sort)


STL中仿函数(functors)、类成员和mem_fun的使用

众所周知,STL使用起来非常方便,其中仿函数(functor)扮演了一个非常重要的角色。灵活运用仿函数的使用对于发挥STL强大功能非常关键。本文详细介绍了如何使用mem_fun和mem_fun1来绑定类成员函数,使之成为functor


VC6下使用STL注意:不要让内存分配失败导致您的旧版 STL 应用程序崩溃

本文来源于MSDN中文站

大多数 C++ 开发人员在他们的代码中都广泛使用了标准模块库 (STL)。如果您是其中的一员,并且正在直接使用即装即用的 STL 和 Visual C++ 6.0,则在内存不足的条件下,您的应用程序就处于崩溃的高度危险的状况下。产生此问题的原因是,检查运算符 new 是否失败是一种非常少见的做法。更糟糕的是,当 new 确实失败时,响应不是标准的。有些语言编译器返回 NULL,而其他语言则引发异常。


C++ STL中用vector 改进内存的再分配

本文说明了vector 容器使用时应该注意的内存分配问题,原理说的比较详细,对于初学者比较适用。

本文描述的是一种很常见的情况:当你在某个缓存中存储数据时,常常需要在运行时调整该缓存的大小,以便能容纳更多的数据。本文将讨论如何使用 STL 的 vector 进行内存的再分配。

体验Visual C++.NET 2005中的STL

本文来自天极Visual Studio.net专栏

为了更好的使STL适合.NET开发,Visual C++产品组,在2005版的Visual C++中重新设计了STL,并命名为STL.NET,从Beta1版本的产品中开始提供。

在STL.NET的设计中,STL的实现使用了CLI泛型和C++模版机制。2005版本的C++将加入C++/CLI动态编程的支持,应当会成为最能够满足程序员设计的语言。

用标准模板库STL实现文件比较

简介
本文讨论如何使用标准模板库(STL),类模板和函数模板,以及其它编程技术来解决实际问题。本文涉及到STL包含的集合和向量,函数模板,类模板,常量检验,出错处理和使用STL的文件I/O。


Effective STL 中文版(完整版)

Winter总算找到《Effective STL》的完整中文版了,奉献给大家。书中作者解释了怎样结合STL组件来在库的设计得到最大的好处。这样的信息允许你对简单、直接的问题开发简单、直接的解决方案,也帮你对更复杂的问题设计优雅的方法。我描述了常见的STL使用错误,而且向你演示怎么避开它们。那帮助你躲开闪资源漏、不可移植的代码和未定义的行为。我讨论了优化代码的方法,所以你能使STL表现得像它应该的那样快速、光滑。
本书作者为Scott Meyers,由龚敏敏翻译。


Effective STL条款31 理解你的排序操作

排序一直是数据结构中的常用算法,STL提供的排序算法非常丰富,如何有效使用就值得探讨。在网上没有找到条款31的翻译,于是我自己翻译了。--Winter

如何进行排序?让我数数有几种方法


条款8:不要把auto_ptr放入容器

本来没有打算自己翻译Effective STL的,怕影响大家情绪:),只是发现有些条款在网络上找不到,只好自己翻译了。--Winter

坦白的讲,这个条款不应加入本书,因为包含atuo_ptr的容器(COAPs)本来在STL中就是禁止的。就算你这么用了,编译器也不会编译你的代码。而标准委员会也没有解释为什么不能这样。对于COAPs我应该什么都不用说的,因为你的编译器应该替你做好了一切工作,所有这种类似的代码都不应该被编译。


用STL快速编写ini配置文件识别类

作者Winter

ini文件是技术人员经常用到的一种系统配置方法,如何读取和快速识别ini文件中的内容实现起来比较繁琐。STL强大的功能在于能快速的实现排序、查找、 识别等功能。本文通过STL中的map,string,vector,ifstream等,来快速实现ini文件的识别类class IniFile。IniFile可以实现常见查找功能,并提供完整的源码。


Effective STL 中文版(大全)

候捷说,对于STL,程序员有三个境界,开始是使用STL,然后是理解STL,最后是补充STL。Effective STL是一本非常好的书,帮助你更好的理解STL,其作者就是《Effective C++》一书的作者。如果你已经初步了解了STL的容器、迭代器、算法和函数,而又想更好的了解STL,那么《Effective STL》是你的最佳选择。