2012-05-02 11 views
2

私はアマチュアですので、私と一緒にご負担ください。STLリスト<Object>リスト内のオブジェクトを変更するイテレータ

このコードはうまくいきますが、デバッグするときに、プロシージャがforループに到達したときに存在し、その内部にあるものを実行しないことは明らかです(これは私が行う必要があります)。

void insertWord(list<Word> &words, string str) 
{ 
    list<Word>::iterator itr; 
    for (itr = words.begin(); itr != words.end(); itr++) //EXITS HERE 
    { 
     if (str == (*itr).aWord) 
     { 
      (*itr).iterateCount(); 
      return; 
     } 
     if (str > (*itr).aWord) 
     { 
      words.push_back(Word(str)); 
      return; 
     } 
    } 
} 

forループが実行されない理由はわかりません。関数の最後までスキップします。

NB: "Word"は文字列とint(その文字列がいくつあるか)を保持するカスタムクラスです。 これ以上の情報が必要な場合は、私はここで死にたい!おかげさまで

+8

あなたはリストに要素が含まれていますか? – juanchopanza

+0

あなたの関数のロジックによると、 'return'は' continue'に変更する必要があります – user2k5

+1

無関係: '(* itr).foo'の代わりに' itr-> foo'を書くことができます。 –

答えて

2

リストが空であるようですので、itr==words.end()とループ内のコードは実行されません。

+0

私はupvoteすることができます前に私は自分自身を15の担当者を得るまで待たなければならないように見えます:(しかし、感謝のヒープ!私は15時に戻るupvote来る – jezpez

0

あなたはstd::mapを使用することができます。

std::map<Word, int> histogram; 

histogram[Word("hello")] += 1; 
histogram[Word("hello")]++; // equivalent 

histogram[Word("vertigo")]++; 
関連する問題