序列容器-为什么所有容器都没有所有方法

时间:2020-07-23 08:35:44

标签: c++ c++11 c++14

我通过参考以下信息来学习C ++序列容器-YAML merge key [Member function table - functions present in C++03 ,- functions present since C++11, - functions present since C++17, - functions present since C++20] 在页面末尾可用。

我无法理解为什么所有序列容器至少支持以下所有基本方法的原因:

forward_list does not supports size()
vectors does not support emplace_front()
arrays does not support capacity()
deque does not supports reserve()
list does not supports emplace_hint()

类似地,还有其他所有可用功能吗?基本上,哪些特性或功能决定了哪种方法可用于一个容器而不适用于其他容器?

1 个答案:

答案 0 :(得分:4)

forward_list不支持size()

std :: forward_list旨在最大程度地提高空间效率,因此不会将大小保留为额外的成员(它位于std :: list中)。要确定尺寸,必须走列表O(N)。

vector不支持emplace_front()

要在最前面插入,std :: vector首先需要转移现有内容。同样,O(N)。这就是std :: dequeue发挥作用的地方。

数组不支持Capacity()

std :: array具有固定的大小,capacity()毫无意义,充其量只能是size()的副本。

双端队列不支持reserve()

保留std :: deque没有意义,因为它不使用连续存储。

列表不支持emplace_hint()

在std :: list上没有emplace_hint()的用例,您只需使用emplace()。