如何有效地从一定长度的字符串向量中删除单词

时间:2018-03-19 06:31:11

标签: c++ string vector

我目前正在尝试使用字符串向量,并且需要能够有效地删除不具有特定字符串长度的元素。

我正在考虑做vector.erase(remove_if(etc))这样的事情,但由于使用C ++ 98我无法使用lambdas,如果我要创建谓词,则需要参数因为长度是变量,可以根据用户输入进行更改。

任何人都可以通过这些限制为此提供基本解决方案吗?

1 个答案:

答案 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);