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

Osk*_*shi 3 c++ element vector

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

她提供了这个例子:

vect[3] = vect[vect.size()-1];
vect.pop_back();
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*ler 5

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

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