gpt4 book ai didi

c++ - 为什么不通过将指针移动到 vector[0] 来实现 c++ std::vector::pop_front()?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:22:17 26 4
gpt4 key购买 nike

为什么 pop_front() 不能通过简单地将 vector 名称中包含的指针移动一个位置来为 C++ vector 实现?所以在包含数组 foo 的 vector 中,foo 是指向 foo[0] 的指针,因此 pop_front() 将使指针 foo = foo[1] 并且括号运算符将只执行正常的指针数学运算。这与 C++ 在为数组分配空间时如何跟踪您正在使用的内存有关吗?

这类似于我看到的关于为什么 std::vector 没有 pop_front() 函数的其他问题,我承认,但我没有没有人问为什么你不能移动指针。

最佳答案

如果这样做,vector 将无法释放其内存。

通常,您希望每个 vector 对象的开销很小。这意味着您只存储三项:指向第一个元素的指针、容量和长度。

为了实现您的建议,每个 vector(所有)都需要一个额外的成员变量:第零个元素所在的起始指针的偏移量。否则,无法释放内存,因为它的原始句柄会丢失。

这是一个权衡,但通常一个可能有数百万个实例的对象的内存消耗比对 vector 执行性能方面绝对最糟糕的事情的极端情况更有值(value).

关于c++ - 为什么不通过将指针移动到 vector[0] 来实现 c++ std::vector::pop_front()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9074808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com