c – 这种从堆栈中删除元素的方法如何工作?

我刚刚开始在我当地的大学学习C课程,教师给了课程一个分配,我们必须创建一个向量并从堆栈中间删除一个元素.

她提供了这个例子:

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

现在..我已经测试了它并且它有效我只是不确定它是如何工作的或为什么它工作.我相信有人可以提供简单的解释吗?

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

请注意,这并不保留向量中元素的顺序,但它相对有效 – 从向量中间擦除可能涉及大量内存复制,因为要删除的元素之后的所有元素都需要移位一以适应差距(记住:std :: vector将其元素存储在连续存储中).从最终删除几乎没有任何成本.

转载注明原文:c – 这种从堆栈中删除元素的方法如何工作? - 代码日志