C++ 删除某些 symbol/punctuation

C++ removing certain symbol/punctuation

token.erase(std::remove_if(token.begin(), token.end(), ispunct), token.end()); 似乎使用 ispunct 会删除所有标点符号。是否可以只删除某些类型?例如,如果我想删除所有标点符号,例如冒号?还是那种情况下必须自己写条件?

使用 lambda (或可调用对象) 作为 token.erase(...) 调用的谓词:

token.erase(
    std::remove_if(
        token.begin(), 
        token.end(), 
        [](char x){ return ispunct(x) && x != ':'; }), 
    token.end());