我有一组三角形索引,基本上是一个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());
其中u1
,u2
,u3
是需要删除的三个值数字。它们必须在数组中是连续的。
有没有快速的方法来做到这一点?
答案 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);
}
}