C++ 序列容器-为什么只有少数几个序列容器支持少数表达式
我正在浏览名为requirement的序列容器: 但它声明以下表达式必须有效,并对名为的序列容器具有指定的效果: 例如: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
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
。