作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何删除 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());
哪里hasNoRegions
是 PTile
的成员函数.这显然行不通,因为我有一个 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/
我正在做一个项目,我的 android 在这个项目中作为一个网络服务器工作;输入带端口号的 IP 地址,打开 Web 界面,用户可以将文件上传到手机。我想在 Web 界面上显示一些图片,以便我们的界面
我是一名优秀的程序员,十分优秀!