符合标准的容器

hel*_*922 4 c++ stl

我一直很好奇是什么需要一个符合stl标准的容器(或者符合boost标准,我的理解是它们要么相同,要么非常相似).我已经看到了一些人们称之为符合stl的例子(例如,这个在codeproject,显然是实际的stl容器),但我不确定我需要拥有哪些容器的组件.

从我可以收集到的,我至少需要这些东西:

  1. 符合STL的迭代器(当前的stl只使用双向或更高的迭代器,不知道这是一个要求还是只是偶然的机会,仍然需要考虑什么才能被认为是"符合stl标准的迭代器")

  2. 定义分配器(默认为std::allocator)以及正确使用它们的机制(仍然试图找出最后一部分的含义)

  3. 用于元编程的公共typedef(指针类型,const指针类型,引用类型,值类型,const引用类型,差异类型,可能还有其他一些?).问题:什么是difference type

  4. 'generic'(即使用元编程/模板使容器能够容纳几乎任何类型)

还有什么我错过了,或者更糟糕的是,在上面的列表中出错(可能是诸如const-correctness,线程安全,异常生成/处理等等)?此外,是否存在一个规范文档,详细说明了所需要的内容,如果这样的事情存在的话?

Jer*_*fin 5

  1. 迭代器:标准库定义迭代器类别.您希望提供模拟其中一个类别的迭代器.根据您的观点,istream_iteratorostream_iterator允许流是不提供双向迭代器的容器.

  2. 基本上,您使用分配器allocate(n)n对象分配空间,并deallocate(p, n)n指向的对象释放空间p.您通常使用分配器constructdestroy成员.

  3. 是的,还有一些其他的(例如,关联容器定义了一个key_type).difference_type是一种可以表示两个指针之间差异的类型.它通常由分配器提供,因此容器只有一个类型的类型:

    typedef Allocator :: difference_type difference_type;

  4. 不一定(甚至通常)涉及任何元编程,只是(相当基本的)泛型编程.即,您定义了一个模板,但不一定在编译时执行任何计算(这是元编程).

当前标准没有定义任何有关线程安全的内容.所需要的最终参考是C++标准本身.您可以免费下载即将推出的C++ 0x标准(N3242)的当前草案.容器要求见第23.2节.您可能还想查看Josuttis的 The C++标准库 - 它比标准本身更温和一些.

更新:当然,C++ 11(在最初编写之后仅略微增加)添加了线程,以及一些关于线程安全,数据竞争等的定义.这大致规定了大多数人已经做过的事情:允许并行阅读,但写作必须是独家的.