我注意到vector::push_back
和insert
之間的行爲不同。std :: move在vector :: insert和push_back上的行爲不同
當我做
iter = myVector.begin() + 5;
myVector.push_back(std::move(*iter));
在矢量第六元素被添加到了底部,並會從原來的位置刪除。
然而,如果我這樣做:
iterBegin = myVector.begin();
myVector.insert(iterBegin,std::move(*(iterBegin + 5)));
第六元素被插入在第一的位置,但它沒有被刪除的形式以前的位置。
爲什麼std::move
在insert()
中不起作用,如push_back()
?
我在g ++上試過了,我沒有得到第6個元素被刪除。我甚至不明白爲什麼它應該被刪除......(儘管它可能會處於不可用狀態,但你永遠不應該「移動」,認爲你仍然在使用它)。你是如何檢查它被刪除的?第七個元素是否仍然存在? 「尺寸」是否改變了? – rabensky
您可以添加一個完整的代碼示例,包括向量的聲明以及您檢查舊元素是否仍然存在的方式? – jogojapan
據我所知,'std :: move'不會從容器中移除一個元素。最多它將竊取該元素的內容並將它們移動到一個新對象中,但舊元素的「外殼」仍將留在容器中。 –