【发布时间】:2017-03-10 16:28:36
【问题描述】:
如何删除满足条件ptile->hasNoRegions() 的std::vector<std::shared_ptr<PTile>> ptiles 的元素?我一直在尝试为此使用remove_if,但Predicate 使用对象的数据成员,而不是指针。如果元素是指向对象的智能指针,如何将谓词设置为函数?
我现在拥有的东西
ptiles.erase(std::remove_if(ptiles.begin(), ptiles.end(), &PTile::hasNoRegions), ptiles.end());
其中hasNoRegions 是PTile 的成员函数。这显然不起作用,因为我有一个 std::shared_ptr<PTile>,而不是 PTile。
我正在使用 MSVC 2013。
【问题讨论】:
-
元素被其他对象引用,所以它们是共享的。我正在将它们从特定向量中删除,但它们会存活♫。另外,
std::unique_ptr是不可复制的,所以我不能拥有unique_ptr的std::vector,对吗? -
vector 要求元素是可移动的。也许您只是想传递原始引用或指针?
标签: c++ c++11 smart-pointers idioms