是否有一些理由为什么标准委员会选择为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不符合序列与列表相比的所有要求.