什么是容器/适配器?
有人请用外行人的语言解释。
我试图在互联网上查找,但定义和解释太技术化,难以理解。
我具有C ++及其子主题的基本知识,如(class / templates / STL)。
编辑1:
有谁能请给我一个容器/适配器应用的实际例子?
只是为了更好地理解:-)
谢谢。
答案 0 :(得分:66)
容器是包含数据的特定数据结构,通常是无限量的。每种容器类型都有限制如何有效地访问,添加或删除数据。
以下是使用STL类的容器的一些示例。
以下是序列容器,这意味着数据是可靠排序的(也就是说,它们有正面和背面。我并不是说它们会自动排序!)。
这些是关联容器,意味着元素不再有序,而是相互关联,用于确定唯一性或映射:
有关详细信息,请参阅this reference page,包括每个操作的时间复杂性以及每个容器类型详细页面的链接。
答案 1 :(得分:55)
<joke>
C ++是技术性的,难以理解:-D </joke>
容器是STL中可以包含数据的数据类型。
示例:vector
作为动态数组
适配器是来自STL的数据类型,它调整容器以提供特定的接口。
示例:stack
在所选容器顶部提供堆栈接口
(旁注:两者实际上都是模板而不是数据类型,但定义看起来更好)
答案 2 :(得分:6)
来自The SGI STL documentation的“容器”的技术定义相当不错:
Container是一个存储其他对象(其元素)的对象,它具有访问其元素的方法。特别是,作为Container模型的每个类型都有一个关联的迭代器类型,可用于迭代Container的元素。
因此,容器是一种数据结构,它包含(“包含”)某种类型的对象集合。关键的想法是有不同类型的容器,每个容器以不同的方式存储对象并提供不同的性能特征,但它们都有一个标准的接口,这样你就可以轻松地换一个容器而不需要修改太多使用容器的代码。我们的想法是,容器的设计应尽可能互换。
容器适配器是提供容器功能子集的类,但可以提供其他功能,以便在某些情况下更容易使用容器。例如,您可以轻松地将std::vector
或std::deque
用于堆栈数据结构,并将push_back
,back
和pop_back
作为堆栈接口调用; std::stack
提供了一个界面,可以使用std::vector
或std::deque
或其他序列容器,但提供更标准的push
,top
和pop
用于访问成员的成员函数。