删除矢量元素的正确实现
Proper implementation of removing vector elements
ALL,
这是这个线索的延续。
我尝试写以下代码:
struct Remover : public std::binary_function<CPlayer,void,bool>
{
public:
bool operator()(const CPlayer &player) const
{
return player.IsNewPlayer();
}
};
并这样称呼它:
players_pool->erase( std::remove_if( players_pool->begin(), players_pool->end(), std::bind2nd( Remover() ) ) );
但它给了我一个错误:
std::bind2nd():需要2个参数-提供1个。
如何正确地调用这个函子?
谢谢。
您不需要将Remover()
封装在std::bind2nd()
中。
此外,您不需要从std::binary_function<>
派生(无论如何,这是错误的;Remover
是一元函子)。事实上,你不需要从任何事情中得出结论。
最后,如果您的编译器支持C++11,您可以将代码简化为:
players_pool->erase( std::remove_if( begin(*players_pool), end(*players_pool),
[](const CPlayer &player) {
return player.IsNewPlayer();
} ),
end(*players_pool) );
只需将binary_function更改为unary_function即可
您还需要将结束迭代器添加到擦除调用中,以便擦除所有删除的值。
相关文章:
- 如何实现 Front() 方法以返回模板化双向链表C++的第一个元素?
- 如何正确实现容器类中元素的更改?
- 如何实现唯一 id 队列,其中元素可以在 C++ 中"bumped"到顶部?
- 如何实现四个 i8 元素组的高效_mm256_madd_epi8点积
- C++二叉搜索树实现不会添加每个元素
- unordered_set是否适合存储矢量<int>元素的数据结构?如果是这样,我将如何实现哈希函数?
- std::unordered_map如何存储和比较其密钥,以实现无需订购即可快速访问元素?
- 在C++中实现二叉搜索树,搜索不起作用.尝试打印节点的元素会导致输出崩溃
- 为什么用于阈值矩阵元素的 Matlab 逻辑索引操作在性能上优于 mex 实现?
- 内部源代码 - 在链接列表实现中插入元素上的删除会破坏整个应用程序
- 在C 中,可以用语法[i,j,..]实现访问数组元素的功能,而语法就像numpy中的ndarray样式一样
- 试图用c++编写我自己的链表实现,在点击列表中的3个元素后编写segfault代码
- 无法使用迭代器擦除矢量元素,矢量元素实现移动构造函数
- 如何实现数据结构,就像C 中的数组一样支持不同的类型元素
- std::tuple的实现是否允许在触发空类元素的派生到基转换时失败
- 实现类型类向量的元素
- 如何使用 CUDA 正确实现每个元素上的执行函数
- 我如何实现 N 选择 K,允许元素重复,并对具有重复元素的输出进行低优先级
- 在Haskell中使用O(1)元素访问实现高效的类似拉链的数据结构
- 自定义列表实现迭代器无法访问最后一个元素 (c++)