如何使用循环检查等价,然后执行一些代码,如果没有等价?

时间:2012-12-11 21:18:12

标签: c++ design-patterns

我做了类似的事情:

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

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

2 个答案:

答案 0 :(得分:4)

修改:代码更改后(标志== 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;
  }
}

答案 1 :(得分:2)

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

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),并返回truefalse,具体取决于范围中的任何元素是否返回来自谓词的true值。还有另外两种变体std::any_of()std::all_of()