我做了类似的事情:
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);
我想知道如何在没有“旗帜”的情况下做到这一点。感谢。
答案 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),并返回true
或false
,具体取决于范围中的任何元素是否返回来自谓词的true
值。还有另外两种变体std::any_of()
和std::all_of()
。