【问题标题】:How does this method of removing an element from a stack work?这种从堆栈中删除元素的方法是如何工作的?
【发布时间】:2011-08-15 10:22:17
【问题描述】:

我刚开始在当地大学上 C++ 课程,老师给课程分配了一项作业,我们必须创建一个向量并从堆栈中间删除一个元素。

她提供了这个例子:

vect[3] = vect[vect.size()-1];
vect.pop_back();

现在..我已经对其进行了测试并且它可以工作我只是不确定它是如何工作的或为什么会工作。我确定有人可以提供一个简单的解释吗?

【问题讨论】:

  • 请注意,该示例不能仅使用堆栈操作(推送和弹出)。要擦除堆栈中间的元素,您需要创建一个新堆栈,将元素弹出推送到新堆栈,弹出要删除的元素,然后将它们弹出推送回原来的..

标签: c++ vector element


【解决方案1】:

你想从向量中间删除一个元素,所以你只需用最后一个元素(索引size()-1)覆盖它 - 因为最后一个元素因此变得多余,我们可以pop_back()它。最后我们得到了想要的结果——向量大小减一,vect[3] 的旧值消失了。

请注意,这不会保留向量中元素的顺序,但它相对有效 - 从向量中间擦除可能涉及大量内存复制,因为要删除的元素需要移动 1 以适应间隙(请记住:std::vector 将其元素存储在连续存储中)。从头到尾擦除几乎没有成本。

【讨论】:

    猜你喜欢
    • 2021-08-06
    • 2021-05-27
    • 1970-01-01
    • 2021-07-27
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    相关资源
    最近更新 更多