【发布时间】:2012-02-22 21:25:29
【问题描述】:
为什么不能通过简单地将向量名称中包含的指针移一位来为 C++ 向量实现pop_front()?因此,在包含数组foo 的向量中,foo 是指向foo[0] 的指针,因此pop_front() 将使指针变为foo = foo[1],而括号运算符将只进行正常的指针数学运算。这与 C++ 在为数组分配空间时如何跟踪您正在使用的内存有关吗?
这与我看到的其他问题类似,即为什么 std::vector 没有 pop_front() 函数,我承认,但我没有人问你为什么不能移动指针。
【问题讨论】:
-
您可以将
deque用作更通用、更灵活的容器,本质上可以直接替代vector。甚至有人可能会说deque应该是 C++ 中的“默认”容器,而vector应该保留用于连续存储的特殊需要。 -
@KerrekSB:
deque不是双向链表吗?如果是这样,它绝不应该是默认容器。 -
@VioletGiraffe:重点是“如果是这样”。幸运的是,我们在这里的“else”分支:-)
-
@VioletGiraffe:不,不是。如果是这种情况,我们就不会有
deque,因为std::list<>已经是双重链接的。 -
对我之前的评论的澄清:双向链表可以用于队列本身,但整个容器不能是双向链表,因为它不支持恒定时间元素访问。并且 +1 给 OP 一个好问题!