std :: forward_list和序列概念要求

时间:2015-02-06 18:42:59

标签: c++ c++11

为什么标准委员会选择为std::forward_list实施API以使其不符合Sequence容器概念要求,是否有某种原因?

Sequence概念要求指定容器必须与以下表达式兼容:

c.insert(it, v);    // insert at position
c.insert(it, n, v); // fill insert
c.insert(it, begin, end);  // insert range

...其中it是一个迭代器,v是一个元素,n是一个整数,begin/end是一个迭代器范围。

由于insert函数需要迭代器起始位置,因此单独链接列表无法使用此API。但由于某种原因,std::forward_list具有insert_after函数,这会破坏与Sequence概念的兼容性。

这有什么理由吗?

1 个答案:

答案 0 :(得分:2)

原因是在单个链接列表中的元素之前插入非常低效:您必须从头开始并迭代直到找到要插入的请求位置,插入O(n)而不是恒定时间。

比较他们为什么不在operator[]中提供std::list,因为这需要线性时间。正如listvector相比,forward_list无法满足随机访问的要求,list与{{1}}相比无法满足序列的所有要求。