C++ vector remove_if 对

标签 c++ data-structures stdvector

我正在尝试使用 remove_if 从 vector 中删除对,但出现错误

bool MyClass::isSingleTag(const pair<int,string> & val) {
   string tag = val.second;
   int posImg, posBr;
   posImg = tag.find("<img");
   posBr = tag.find("<br");
   if (posImg == -1 && posBr == -1) {
      return false;
   } else {
      return true;
   }
}
void MyClass::deleteSingleTags() {
   vector<pair<int,string>>::iterator last_iter;
   last_iter = remove_if(allTags.begin(), allTags.end(), &MyClass::isSingleTag);
   allTags.erase(last_iter, allTags.end());
}

错误:http://pastebin.com/1FCWRVDG

最佳答案

如果没有函数所属类的对象,则无法调用指向成员函数的指针。

制作 isSingleTag static - 将其地址生成一个普通的函数指针。或者,使它成为一个自由函数,因为看起来它首先作为一个成员函数没有任何业务(它不访问任何其他成员,是吗?)。

另一个选项(当你合法地需要成为一个成员函数时)是使用 std::bind 将它绑定(bind)到一个类对象:

MyClass obj;
auto func = std::bind(&MyClass::isSingleTag, obj);

现在 func 是一个可以传递给算法的可调用对象。

关于C++ vector remove_if 对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28198560/

相关文章:

c++ - C++中vptr(虚拟指针)的类型

algorithm - 半边数据结构delaunay三角剖分

c++ - 如何从 std::vector 创建 QList

c++ - 命名空间 'std' 中的“vector ”未命名类型

c++ - 在 C++ 程序中使用 C 库中定义的类型,命名空间类似于方案

c++ - 强制为模板参数类实现函数?

c++ - 在 C++ 中生成 .pfm 图像

python - 无法在 Python 中打印 Trie 中的节点

objective-c - 使用 NSDictionary 将索引存储为值来加快 NSArray 查找

c++ - 如何在不复制的情况下将一个 vector move 到另一个 vector