我一直很好奇是什么需要一个符合stl标准的容器(或者符合boost标准,我的理解是它们要么相同,要么非常相似).我已经看到了一些人们称之为符合stl的例子(例如,这个在codeproject,显然是实际的stl容器),但我不确定我需要拥有哪些容器的组件.
从我可以收集到的,我至少需要这些东西:
符合STL的迭代器(当前的stl只使用双向或更高的迭代器,不知道这是一个要求还是只是偶然的机会,仍然需要考虑什么才能被认为是"符合stl标准的迭代器")
定义分配器(默认为std::allocator
)以及正确使用它们的机制(仍然试图找出最后一部分的含义)
用于元编程的公共typedef(指针类型,const指针类型,引用类型,值类型,const引用类型,差异类型,可能还有其他一些?).问题:什么是difference type
?
'generic'(即使用元编程/模板使容器能够容纳几乎任何类型)
还有什么我错过了,或者更糟糕的是,在上面的列表中出错(可能是诸如const-correctness,线程安全,异常生成/处理等等)?此外,是否存在一个规范文档,详细说明了所需要的内容,如果这样的事情存在的话?
迭代器:标准库定义迭代器类别.您希望提供模拟其中一个类别的迭代器.根据您的观点,istream_iterator
并ostream_iterator
允许流是不提供双向迭代器的容器.
基本上,您使用分配器allocate(n)
为n
对象分配空间,并deallocate(p, n)
为n
指向的对象释放空间p
.您通常不使用分配器construct
或destroy
成员.
是的,还有一些其他的(例如,关联容器定义了一个key_type
).difference_type
是一种可以表示两个指针之间差异的类型.它通常由分配器提供,因此容器只有一个类型的类型:
typedef Allocator :: difference_type difference_type;
不一定(甚至通常)涉及任何元编程,只是(相当基本的)泛型编程.即,您定义了一个模板,但不一定在编译时执行任何计算(这将是元编程).
当前标准没有定义任何有关线程安全的内容.所需要的最终参考是C++标准本身.您可以免费下载即将推出的C++ 0x标准(N3242)的当前草案.容器要求见第23.2节.您可能还想查看Josuttis的 The C++标准库 - 它比标准本身更温和一些.
更新:当然,C++ 11(在最初编写之后仅略微增加)添加了线程,以及一些关于线程安全,数据竞争等的定义.这大致规定了大多数人已经做过的事情:允许并行阅读,但写作必须是独家的.
归档时间: |
|
查看次数: |
1203 次 |
最近记录: |