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ラムダを使用しています)を受け取り、範囲内の要素のいずれかが述語から値を返すかどうかに応じて、trueまたはを返します。他にも2つのバリエーションがあります。falsetruestd::any_of()std::all_of()

于 2012-12-11T21:20:58.160 に答える