这种从堆栈中删除元素的方法是如何工作的? 我刚开始在我所在的学院上一个C++课,老师给了我们一个任务,我们必须创建一个向量并从堆栈的中间删除一个元素。

这种从堆栈中删除元素的方法是如何工作的? 我刚开始在我所在的学院上一个C++课,老师给了我们一个任务,我们必须创建一个向量并从堆栈的中间删除一个元素。,c++,vector,element,C++,Vector,Element,她举了一个例子: vect[3] = vect[vect.size()-1]; vect.pop_back(); 现在。。我已经测试过它了,但我不确定它是如何工作的,或者为什么工作。我相信有人可以提供一个简单的解释?您想从向量的中间删除一个元素,所以您只需用最后一个元素覆盖它(使用索引size()-1)-因为最后一个元素因此变得多余,我们可以弹出返回()。最后我们得到了期望的结果-向量大小减少了一,并且vect[3]处的旧值消失了 请注意,这不会保留向量中元素的顺序,但它相对有效-从向量中间删

她举了一个例子:

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

现在。。我已经测试过它了,但我不确定它是如何工作的,或者为什么工作。我相信有人可以提供一个简单的解释?

您想从向量的中间删除一个元素,所以您只需用最后一个元素覆盖它(使用索引
size()-1
)-因为最后一个元素因此变得多余,我们可以
弹出返回()。最后我们得到了期望的结果-向量大小减少了一,并且
vect[3]
处的旧值消失了


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

请注意,仅使用堆栈操作(推送和弹出)不可能实现此示例若要删除堆栈中间的元素,则需要创建新堆栈、POP推送元素到新堆栈、弹出要移除的元素,并将它们推回到原件。