-3

我是 STL 的新手,在 slist 中遇到问题。我有一个 slistalist。我需要从这个 slist 中删除字符串的最后一个条目假设“版本”。我怎样才能做到这一点。

4

1 回答 1

1

因为std::slist<T>您不能删除迭代器直接指向的元素。您需要找到它之前的元素。要找到要擦除的第一个元素,我将使用std::adjacent_find()并忽略谓词中的第一个参数:

void erase_value(T const& value, std::slist<T>& l) {
    auto it = std::adjacent_find(l.begin(), l.end(),
        [=](T const&, T const& v) {
            return v == value;
        });
    if (it != l.end()) {
        l.erase_after(it);
    }
}

要删除最后一个元素,您需要继续查找,记住以前找到的元素,然后删除最后一个找到的元素。也就是说,找到第一个元素,然后,虽然可能有更多,但继续寻找。

于 2012-10-03T13:51:35.893 回答