C++ 向量 remove_if 对
C++ vector remove_if pairs
我正在尝试使用 remove_if 从向量中删除对,但出现错误
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());
}
如果没有 class 函数所属的对象,则无法调用指向成员函数的指针。
Make isSingleTag
static
- 获取它的地址会产生一个普通的函数指针。或者,使它成为一个自由函数,因为看起来它首先作为一个成员函数没有任何业务(它不访问任何其他成员,是吗?)。
另一个选项(当你合法地需要成为成员函数时)是将它绑定到一个 class 对象,使用 std::bind
:
MyClass obj;
auto func = std::bind(&MyClass::isSingleTag, obj);
现在 func 是一个可以传递给算法的可调用对象。
我正在尝试使用 remove_if 从向量中删除对,但出现错误
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());
}
如果没有 class 函数所属的对象,则无法调用指向成员函数的指针。
Make isSingleTag
static
- 获取它的地址会产生一个普通的函数指针。或者,使它成为一个自由函数,因为看起来它首先作为一个成员函数没有任何业务(它不访问任何其他成员,是吗?)。
另一个选项(当你合法地需要成为成员函数时)是将它绑定到一个 class 对象,使用 std::bind
:
MyClass obj;
auto func = std::bind(&MyClass::isSingleTag, obj);
现在 func 是一个可以传递给算法的可调用对象。