【问题标题】:Remove object pointer from a vector从向量中删除对象指针
【发布时间】:2018-04-30 14:24:33
【问题描述】:

我知道这篇文章可能是重复的,但我能找到的答案不清楚。

std::vector<EWindow> windows;
void closeWindow(EWindow* window);

这些是我的函数,我想从向量 windows 中删除指针 EWindow*
C++ Remove object from vector 解释如何删除对象而不是指针。

【问题讨论】:

  • windowsEWindow 的向量,而不是EWindow*。如果要包含指针,请使用std::vector&lt;EWindow*&gt; windows。此外,根据您的需要,最好使用智能指针,std::unique_ptrstd::shared_ptr
  • 你可以搜索并删除对应的EWindow,但是后面的呢?所有指向它们的指针都会被弄乱……
  • 其实EWindow是一个更容易创建窗口的对象(就像Qt一样)我应该使用指针还是智能指针?

标签: c++ vector


【解决方案1】:

但是您需要使用指针向量来删除指针。 std::vector&lt;EWindow*&gt; windows; 删除指针的代码来自向量:

将你的向量声明为指针向量:

std::vector<EWindow*> windows;

//...

void closeWindow(EWindow* window)
{
    //...
    auto RemoveIt = std::find(windows.begin(),windows.end(), window);
    if ( RemoveIt != windows.end() )
    {
        windows.erase(RemoveIt);
    }
    //...
}

在向量中查找元素,如果存在则将其从向量中删除

【讨论】:

  • @Quentin 抱歉,已修复))在我的 ide 上用简单字符检查了它
  • 非常感谢,但事实上,EWindow 是一个更容易创建窗口的对象(如 Qt),我应该使用指针还是智能指针?
  • 如果 OP 的向量确实是实例向量而不是指向实例的指针,则不会编译。
  • @iRandomXx 是的,您可以使用智能指针而不是简单指针。如果程序中应该有一个实例,std::unique_ptr 可以提供帮助,当一个实例上有很多指针时,std::shared_ptr 可以提供帮助。他们使用 RAII 习语。你不需要处理删除指针。
猜你喜欢
  • 2014-04-28
  • 2013-07-05
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 2023-03-26
相关资源
最近更新 更多