私はコードをもっている:
it = tableAndHand.begin();
while(++it != tableAndHand.end()) {
if(*it == *(--it)) {
++cardCount;
++it;
} else {
cardCounts1.insert(pair<int,int>(cardCount,*it));
while(cardCount > 1) {
it = tableAndHand.erase(--it);
--cardCount;
}
++it;
}
}
cardCounts1.insert(pair<int,int>(cardCount,*(--it)));
while(cardCount > 1) {
it = tableAndHand.erase(--it);
--cardCount;
}
tableAndHand は開始時に 7 つの値のリストであり、いくつかの値を消去した後、問題のある場所でセグメンテーション違反が発生します。なぜですか?
リスト内の値はソートされ、リスト {0, 0, 0, 1, 1, 1, 2} のどこかで失敗し、1 を繰り返します (2 つの 0 が正しく消去された後、リストのサイズは既に 5 です)。
一意の値の数をマップ cardCounts1 に保存し、リストから繰り返される値を消去したいだけですが、アルゴリズムの何が問題になっていますか?
編集: 問題は (*it == *(--it)) が左から右に評価されていないように見えますが、cplusplus.com のオペレーターに関する記事やいくつかの記事で「==」の評価が見つかりません。他のサイトでは、左から右に評価されると言われています。それについての良いリンクはありますか?
EDIT2:OK、動作します。tableAndHand.erase(--it)イテレータを割り当てるのを忘れていましたが、完全かつ高速に動作します:)