编写适合STL的C++容器

shu*_*alo 19 c++ stl reference-manual

我想用一种非常巧妙地融入STL的样式来编写容器类.它的外观和行为应该像标准STL容器一样.

是否有手册,报告,问答等,描述了如何使用这些功能编写代码?这样的文本应该损害STL的设计原则,陷阱,编码约定等.

PS:这个问题部分受到了这个问题的启发:具有动态项目大小的C++向量,尽管这个想法与模板类无关.

ysd*_*sdx 8

这对于简单的数据结构来说并不是很困难.您应该阅读C++标准中有关容器的章节.您可以在此处下载即将推出的C++ 1x标准的草稿:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/#mailing2011-04

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf

在编写迭代器时,您可能希望使用boost :: iterateror_facade.

http://www.boost.org/doc/libs/1_46_1/libs/iterator/doc/iterator_facade.html

  • 确保您精确支持迭代器要求 - 然后所有STL算法都能正常工作.容器要求不那么重要 - 没有太多可用于许多不同容器的要求.最好的想法是让你的容器与标准容器相似,但不要担心在适当的时候会有所不同. (4认同)
  • 我不得不说实际的标准草案是n3290(FDIS),而且它背后是密码墙.因此,对于没有能力或不愿意为此付钱的人来说,这是非常无益的. (2认同)
  • 你可以得到前一个.n3290之间的区别,例如n3242对于休闲程序员来说可能不是很重要(我不知道最近发生了什么,但我想这可能是次要的编辑细节和/或对语言实现者很重要的事情).(任何人?)我不认真,你需要真正明确的C++ 1x标准来实现容器. (2认同)

Mic*_*fik 7

我建议阅读Herb Sutter的"Unstrung".这是一个深入的研究std::string,涵盖了正确的和可以做得更好的事情.我高度重视他对C++编程问题的看法.这是一个很长的阅读,但我保证你将学习一些有关以C++标准库的风格编写类的有用的东西(以及一般的编写类).

你也可以看看Scott Meyers的Effective STL.该书将为您提供对标准库容器用户的期望的良好概述.拥有这种洞察力将帮助您自己编写更好的容器类.