gpt4 book ai didi

c++ - 从具有成员函数的共享指针的 std::vector 中移除_if

转载 作者:行者123 更新时间:2023-11-30 00:45:40 26 4
gpt4 key购买 nike

如何删除 std::vector<std::shared_ptr<PTile>> ptiles 的元素满足条件ptile->hasNoRegions() ?我一直在尝试使用 remove_if为此,但是 Predicate使用对象的数据成员,而不是指针。如果元素是指向对象的智能指针,如何将谓词设置为函数?

我现在有什么

    ptiles.erase(std::remove_if(ptiles.begin(), ptiles.end(), &PTile::hasNoRegions), ptiles.end());

哪里hasNoRegionsPTile 的成员函数.这显然行不通,因为我有一个 std::shared_ptr<PTile> , 不是 PTile .

我正在使用 MSVC 2013。

最佳答案

即使 vector 不存储指针,这也可能行不通,因为成员函数将 this 作为隐式参数,代码不会生成。

您需要编写一个显式处理 std::shared_ptr 的仿函数或 lambda。

ptiles.erase(
std::remove_if(ptiles.begin(), ptiles.end(), [](std::shared_ptr<PTile> const& ptr) {
return ptr->hasNoRegions();
}),
ptiles.end()
);

替代方案,如果您没有 lambda:

//Outside method
bool should_remove_ptile(std::shared_ptr<PTile> const& ptr) {
return ptr->hasNoRegions();
}

//inside method

ptiles.erase(std::remove_if(ptiles.begin(), ptiles.end(), should_remove_ptile), ptiles.end());

关于c++ - 从具有成员函数的共享指针的 std::vector 中移除_if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42723205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com