【发布时间】:2013-06-03 14:42:48
【问题描述】:
STL reference 似乎在概念上有所不同:
- 一方面是“序列容器”(数组向量双端队列 forward_list 列表)
- 另一方面,“关联容器”(设置多集映射 multimap unordered_set unordered_multiset unordered_map unordered_multimap)。
另外,我们好像有:
- 所有实现
begin()方法的容器返回一个指向容器中第一个元素的迭代器。 - 只有具有
front()方法的序列容器返回对容器中第一个元素的引用。
我的理解是 front() 方法可以很容易地定义为 begin() 方法,只需取消引用它的返回值。
因此,我的问题是:为什么没有为定义begin() 方法的所有对象定义front() 方法?(实际上应该是每个容器)
(我想从语义的角度来看,从地图中获取第一个元素并没有从向量中获取第一个元素那么有意义,但我想知道是否有更有效的解释)。
【问题讨论】:
-
我能想到的最好的答案是,接口经常被指定为“鼓励什么使用”,以及“什么可以高效实现”。非序列容器仍然可以迭代(因此它们需要有
begin()和end(),但它们并不是真正适用于您只需要从中选择第一个元素的情况。所以它们没有@ 987654331@,即使它可以实现 -
好吧,这就是我当时所期待的。谢谢大家的回答。此外,为每个容器定义的方法没有任何区别会更容易(如“减少重复代码的数量”)吗?
-
@wolfgang 我不了解你,但我更倾向于遵循 Herb Sutter、Bjarne Stroustrup 以及大多数其他 C++ 大师和标准化委员会成员使用的术语,而不是 SO不受控制的强迫症只是不得不溢出并试图在不存在的地方制造混乱的用户。人们说“STL”时的意思非常非常清楚。它们的意思是“基于 actual STL 库的 C++ 标准库的子集”。你可以让 Scott Meyers 将他的书重命名为“Effective STL”的那一天就是我停止使用这个名字的那一天
-
@jalf 一个简单的“我不同意”就足够了,因此更具建设性和主题性还不够吗?
标签: c++ dictionary stl iterator container-data-type