从STL容器中删除某些东西而不解构它

时间:2010-10-16 00:10:47

标签: c++ vector erase stl

好的,我正在使用C ++ STL容器(目前为vector<customType*>)。 现在我需要从容器中删除元素, 但是使用擦除解构对象,这是不好的,因为我把它取下来,并把它放到一个变量做一些处理然后再到另一个。

目前我的代码非常讨厌,我只是在读完之后把NULL放到我的变量中,然后把if(Q [ii] NULL)继续。 但这并不是那么好。

3 个答案:

答案 0 :(得分:3)

如果你有一个指针容器(听起来就像你将NULL分配给“擦除”元素那样),那么从容器中删除一个元素就不会删除指向的对象。你自己负责这样做。

如果你有一个容器对象(好的,非指针对象),那么你需要在删除之前将该元素复制出容器。

答案 1 :(得分:1)

你不能在不破坏它的情况下从矢量中删除元素。如果向量存储指针,则可以将指针移除到元素,这实际上不会破坏元素本身。

答案 2 :(得分:0)

STL容器操作具有复制语义。因此,每次添加或删除元素时,都会相应地调用构造函数或析构函数(假设为非基本类型)。如果向量在过程中被调整大小,则所有对象将被复制构造并且原件被破坏。没有办法避免所有这些复制。

避免开销的唯一方法是使用(智能)指针向量而不是对象。