代码之家  ›  专栏  ›  技术社区  ›  Frames Catherine White

在不分解STL容器的情况下将其移除

  •  1
  • Frames Catherine White  · 技术社区  · 14 年前

    好的,我正在使用C++ STL容器(当前 vector<customType*> ) 现在我需要从容器中移除元素, 但是使用erase会解构对象,这很糟糕,因为我将它从一个对象上取下来,放到一个变量上进行一些处理,然后放到另一个对象上。

    目前,我的代码非常糟糕,我只是在读取完之后将空值放在它的位置上,放入变量中,然后继续放入if(q[ii]空值)。 但这并不是很好。

    3 回复  |  直到 14 年前
        1
  •  3
  •   James McNellis    14 年前

    如果您有一个指针容器(听起来像是在分配指针之后 NULL “删除”元素),然后从容器中删除元素 删除指向对象。你自己也有责任这么做。

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

        2
  •  1
  •   Charles Salvia    14 年前

    如果不销毁元素,就不能真正从向量中移除它。如果向量存储指针,则可以删除 指针 到元素,它实际上不会破坏元素本身。

        3
  •  0
  •   Oliver Charlesworth    14 年前

    STL容器操作具有复制语义。因此,无论何时添加或删除元素,都会相应地调用构造函数或析构函数(假定为非基元类型)。如果在这个过程中向量被调整了大小,所有的对象都会被复制构造,原始对象也会被销毁。没有办法避免所有这些复制。

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