【发布时间】:2011-07-24 04:07:36
【问题描述】:
我一直很好奇什么需要符合 stl 的容器(或符合 boost 标准,我的理解是它们要么相同,要么非常相似)。我见过一些人们称之为 stl 兼容的示例(例如,this one over at codeproject,显然还有实际的 stl 容器),但我不确定我需要这些容器的哪些组件。
据我所知,我至少需要这些东西:
符合 STL 的迭代器(当前的 stl 仅使用双向或更高级别的迭代器,不知道这是必需的还是偶然发生的,仍在弄清楚需要什么才能被视为“stl-兼容的迭代器”)
定义分配器的机制(默认为
std::allocator)以及正确使用它们(仍在尝试弄清楚最后一部分的含义)用于元编程的公共类型定义(指针类型、常量指针类型、引用类型、值类型、常量引用类型、差异类型,也许还有其他一些?)。附带问题:
difference type是什么?“通用”(即使用元编程/模板使容器能够容纳几乎任何类型)
还有什么我遗漏的,或者更糟的是,在上面的列表中出错了(可能是诸如 const 正确性、线程安全、异常生成/处理等)?另外,如果存在这样的事情,是否有详细说明所需内容的规范文档?
【问题讨论】:
-
我什至不确定“STL 兼容”是否真的意味着任何比演讲者想要的更多的东西。标准模板库已死;其中大部分都被合并到了今天使用的 C++ 标准库中。因此,如果他们使用术语“C++ 兼容”或“C++ 标准库兼容”可能更有意义。如果某些内容是“符合 C++ 2011 的”,that 可能意味着“您可以将这个容器与新的
for语法一起使用”。 -
哦,我没有意识到 stl 与 C++ 标准库不同。我猜同样的问题,但在稍微不同的背景下。我只是在寻找如何创建自己的容器,该容器具有与标准库基本相同的功能/接口,但当然是用于保存不同的数据结构。
-
很多人使用术语“STL”来表示“在 C++ 标准库中幸存的 STL 部分”。术语的含义通常会随着时间而改变。