1

我做了这样的事情:

for (vector<vector<int> > :: iterator it = result.begin(); it != it.end(); ++it) {
  if (equal(it->begin(), it->end(), triplet->begin()) {
    flag = 1;
    break;
  }
}
if (flag != 1) triplets.insert(triplet);

我想知道如何在没有“标志”的情况下做到这一点。谢谢。

4

2 回答 2

4

编辑:代码更改后(flag==1 vs flag!=1),这个答案不再正确

因为您break可以将代码放在 for 中:

for (vector<vector<int> > :: iterator it = result.begin(); it != it.end(); ++it) {
  if (equal(it->begin(), it->end(), triplet->begin()) {
    triplets.insert(triplet);
    break;
  }
}
于 2012-12-11T21:21:30.923 回答
2

您可以使用 中的std::none_of()功能<algorithm>

if (std::none_of(result.begin(), result.end(), [&triplet](const vector<int> &it) -> bool {
    return equal(it.begin(), it.end(), triplet.begin());
}) {
    triplets.insert(triplet);
}

这个函数接受一个范围和一个一元谓词(这里我使用的是 C++11 lambda),并根据范围中的任何元素是否返回谓词中的值来返回true或返回。还有其他两种变体。falsetruestd::any_of()std::all_of()

于 2012-12-11T21:20:58.160 回答