C++ 序列容器-为什么只有少数几个序列容器支持少数表达式

C++ 序列容器-为什么只有少数几个序列容器支持少数表达式,c++,c++11,C++,C++11,我正在浏览名为requirement的序列容器: 但它声明以下表达式必须有效,并对名为的序列容器具有指定的效果: 例如: seqcnt.pop_front() Destroys the first element. deque / list / forward_list seqcnt.pop_back() Destroys the last element

我正在浏览名为requirement的序列容器:

但它声明以下表达式必须有效,并对名为的序列容器具有指定的效果:

例如:

seqcnt.pop_front()               Destroys the first element.                        deque / list / forward_list
seqcnt.pop_back()                Destroys the last element                          deque / list / vector

为什么所有序列容器都不支持所有表达式?

因为序列容器不同,并且具有不同的性能友好型功能

std::array
是一个固定长度的容器;您不能从中删除元素,因为它的长度在编译时是固定的。因此,删除(或插入)元素的函数不存在

根据定义,前向列表是一个方向:从前到后。去除第一个元素是便宜的;它只需要获取第一个节点,删除它,并使第二个节点成为新的第一个节点。要删除最后一个元素,需要遍历整个列表,以在结束迭代器之前到达该元素。这对性能不友好;如果你想自己做,你可以。但是由于它的O(n)性能,标准不会建议通过专门制作函数来实现这一点,这是一个好主意


std::vector
是一个动态大小的数组。最后的删除是一个固定时间操作,因为您只是销毁最后一个元素并递减指针。但是在开始移除时需要将数组中剩余的所有元素向下移动一个。这对性能不友好,因此标准不会建议通过专门为此创建函数来实现这一点。例如,
std::array
不能以任何方式改变其大小,因此不支持任何形式的插入或删除
std::vector
无法有效地从前端删除元素,因此未提供
pop_front