0

この問題を解決するために、次の小さなコードを書きました。

for (std::list<std::vector<int>>::iterator i = l.begin(); i != l.end(); ++i) {
  for (std::list<std::vector<int>>::iterator j = next(i, 1); j != l.end(); ++j) {
    if (includes((*j).begin(), (*j).end(), (*i).begin(), (*i).end())) {
      l.erase(j++);
    }
  }
}

基本的な考え方は、リストの要素が与えられた場合に、リストの残りの部分から何らかの基準 (この場合は包含関係) に一致する要素を削除することです。

これを実行すると、理解できないセグメンテーション違反が発生します。誰でもこれについての手がかりを教えてもらえますか?

4

1 に答える 1

0

コメントは正しいです、ありがとう。修正されたコードは次のとおりです。

for (std::list<colset>::iterator i = l.begin(); i != l.end(); ++i) {
  std::list<colset>::iterator j = next(i, 1);
  while (j != l.end()) {
    if (includes((*j).begin(), (*j).end(), (*i).begin(), (*i).end())) {
      j = l.erase(j);
    }
    else {
      ++j;
    }
  }
}
于 2013-09-24T17:20:45.687 に答える