获取连续元素并将其删除

时间:2018-01-20 20:36:58

标签: c++

我有一组三角形索引,基本上是一个std :: vector 我有三个数字要按值删除,但它们必须是连续的。

我尝试使用以下代码:

updatedIndices.erase(std::remove(updatedIndices.begin(), updatedIndices.end(), u1), updatedIndices.end());

updatedIndices.erase(std::remove(updatedIndices.begin(), updatedIndices.end(), u2), updatedIndices.end());

updatedIndices.erase(std::remove(updatedIndices.begin(), updatedIndices.end(), u3), updatedIndices.end());

其中u1u2u3是需要删除的三个值数字。它们必须在数组中是连续的。 有没有快速的方法来做到这一点?

2 个答案:

答案 0 :(得分:0)

要搜索特定的连续值序列,请使用std::search

SomeType valuesToFind[3] = {u1, u2, u3};
auto p = std::search(
    std::begin(updatedIndices), std::end(updatedIndices),
    std::begin(valuesToFind), std::end(valuesToFind));

if (p != std::end(updatedIndices)) {
    updatedIndices.erase(p, p + 3);
}

答案 1 :(得分:0)

或者使用std::find查找u1,使用std::next功能检查其他两个元素是否跟随并删除范围:

int u1 = 2;
int u2 = 8;
int u3 = 4;
std::vector<int> v{ 1, 2, 8, 4, 9 };
auto resultit = std::find(std::begin(v), std::end(v), u1);
if (resultit != std::end(v)) {
    if (*std::next(resultit) == u2 && *std::next(resultit, 2) == u3) {
        v.erase(resultit, resultit + 3);
    }
}