c – std :: forward_list和序列概念要求

是否有一些理由为什么标准委员会选择为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

…它是一个迭代器,v是一个元素,n是一个整数,begin / end是一个迭代器范围.

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

这有什么理由吗?

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

比较他们为什么不在std :: list中提供operator [],因为它需要线性时间.正如列表不满足随机访问与向量相比的要求,forward_list不符合序列与列表相比的所有要求.

点赞