1

好的,我正在使用 C++ STL 容器(目前vector<customType*>)。现在我需要从容器中删除元素,但是使用擦除会解构对象,这很糟糕,因为我要把它从一个容器中取出,然后将它放到一个变量上,然后再放到另一个变量上。

目前我的代码非常讨厌,我只是在我读完它之后将 NULL 放在它的位置,放入我的变量中,然后放入 if (Q[ii]NULL) 继续。但这不是很好。

4

3 回答 3

3

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

如果您有一个对象容器(嗯,非指针对象),那么您需要在擦除之前将元素从容器中复制出来。

于 2010-10-16T00:13:51.543 回答
1

你不能真正从向量中删除元素而不破坏它。如果您的向量存储指针,您可以删除指向元素的指针,这实际上不会破坏元素本身。

于 2010-10-16T00:14:03.277 回答
0

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

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

于 2010-10-16T00:15:57.477 回答