C++ STL 容器 - 关于类型的一些问题?

标签 c++ types stl stack containers

enter image description here


1。如果Queue基本上是一个“链接列表”,那么它应该是关联类型,并且Deque也应该是关联类型,因为这两者抽象数据类型属于该类别。为什么Queue是“适配器类型”而Deque是“顺序”类型?为什么这些类型与其他定义混合在一起?

2.为什么Stack是适配器类型?是因为它遵循包装模式并存储标志吗?


此外,如果我没有意义或技术上不正确,您能指出吗?

编辑:我对关联类型的定义:http://en.wikipedia.org/wiki/Associative_array - 去查看“实现”选项卡,在第一句话中您将看到“链接列表”数据结构。

最佳答案

我想你不知道“关联”这个词是什么意思。关联类型将一组数据与另一组数据相关联。就像人的名字一样,你可以通过查找名字来找到一个人。 deque 可以称为_类似于_链表,它只是一个对象序列,因此它是一个顺序容器。没有发生任何对象关联。另请记住,类别基于接口(interface),而不是实现

我不同意使用“适配器”作为一个类别,实际上,适配器为顺序容器提供了一个新的接口(interface),因此它们的行为不再像容器,而是完全像其他东西一样。即队列、优先级队列或堆栈。同样,适配器不满足容器接口(interface)。 (尽管它们仍然可以被视为容器,具体取决于您的定义)

尽管名称不同,dequequeue 没有任何共同点。第一个是顺序容器,它针对两端的推送和弹出进行了优化,但可以执行 vector 可以执行的任何操作。 queuequeue 中对象的接口(interface)。

请注意,您的列表缺少 C++11 容器:arrayforward_list 是新的顺序容器,unordered_mapunordered_multimapunordered_setunordered_multiset 是新的关联容器。没有新的容器适配器。

关于C++ STL 容器 - 关于类型的一些问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18280273/

相关文章:

c++ - 通过匹配将排列解析器转换为 vector <bool>

c# - Type.GetType 不工作

C++ 128/256 位固定大小整数类型

c++ - 使用 boost::bind 和 boost::static_pointer_cast 转换 boost::shared_ptr 的 vector

STL - input_iterator_tag 与 forward_iterator_tag 有何不同?

c++ - 帮助阵列

c++ - 为什么没有出现滚动波形?

c++ - 接受容器类型作为输出参数的方法的协议(protocol)/约定

c++ - 如何将浮点文字转换为相同位模式的无符号整数

c++ - 您如何组织 STL header ?