我目前正在尝试使用字符串向量,并且需要能够有效地删除不具有特定字符串长度的元素。
我正在考虑做vector.erase(remove_if(etc))
这样的事情,但由于使用C ++ 98我无法使用lambdas,如果我要创建谓词,则需要参数因为长度是变量,可以根据用户输入进行更改。
任何人都可以通过这些限制为此提供基本解决方案吗?
答案 0 :(得分:3)
在C ++ 03中你没有像functor那样,它们使用起来只有10倍......
// important: outside from any function
// (local types weren't allowed as template parameters)
struct size_mismatcher {
size_t size;
size_mismatcher(size_t size) : size(size) {}
bool operator()(const std::string& s) { return s.size() != size; }
};
// in your function:
vec.erase(std::remove_if(vec.begin(), vec.end(),
size_mismatcher(target_size)),
vec.end());
或者只是以经典的方式来做:
size_t wp = 0;
for(size_t rp = 0, n = vec.size(); rp != n; ++rp) {
if(vec[rp].size() == target_size) {
vec[wp] = vec[rp];
++wp;
}
}
vec.resize(wp);