struct
{
T* begin; // points to the first T in the vector
T* end; // points just after the last T in the vector
int capacity; // how many Ts of memory were allocated
};
“ start”具有“指向向量中第一个 T 的指针”和“指向我们分配的所有内存的指针”的双重作用因此,不可能通过简单地递增“ start”来“弹出”向量前面的元素——这样做,你就不再有一个指向需要释放的内存的指针。会泄露内存。所以“ pop _ front”需要将所有 T 从向量的后面复制到向量的前面,这相对来说比较慢。所以他们决定把它排除在标准之外。
你想要的是这样的东西:
struct
{
T* allocated; // points to all the memory we allocated
T* begin; // points to the first T in the vector
T* end; // points just after the last T in the vector
int capacity; // how many Ts of memory were allocated
};
通过这种方法,您可以通过向前和向后移动“ start”来“ pop _ front”,而不会忘记以后要释放哪些内存。为什么 std: : Vector 不这样工作?我想这是写标准的人的品味问题。他们的目标可能是提供最简单的“动态可调整数组”,我认为他们成功了。