1

問題は、マルチセット イテレータを何らかの値に初期化して、イテレータへの割り当てが成功したかどうかを後で確認できるようにすることです。プログラムのあるサイクルでこの初期化を行わないと、いくつかのゴミとすべてのクラッシュが発生します。疑似コードでは、次のように考えます。

multiset<whateverclassA,whateverclassB>::const_iterator init_me = NULL;
...//if succesfull, something is assigned to init_me iterator
if (init_me != NULL)
//do something

ただし、通常のポインターではないため、単純な NULL ではおそらく十分ではありません。どんな助けでも大歓迎です!

4

3 に答える 3

3

を使用しstd::multiset::endます。std::multiset::findこれは、値が見つからなかった場合などのアルゴリズムによって返される値でもあります。

multiset<whateverclassA,whateverclassB>::const_iterator 
    init_me = your_multiset.end();

/* ... */

if (init_me != your_multiset.end())
    //do something
于 2013-01-25T10:06:43.810 に答える
3

変数init_meはオブジェクトインスタンスでありNULL、ポインタです。非ポインターインスタンスをポインターと比較することはできません。

あなたがすべきことはinit_me、のような「イテレータなし」を意味する別のイテレータに設定され、それとend比較されます。

于 2013-01-25T10:07:55.103 に答える
2

問題のマルチセットが常に存在し、宣言時に決定される場合init_me(つまり、イテレーターが指すことができるマルチセットが1つしかない場合)、mymultiset.end()マーカーとして使用できます。

(このイテレータはコンテナの最後の要素を指すのではなく、「終了」を指すことに注意してください。つまり、特別な値です。これにより、フラグを立てるのに役立ちます。他のイテレータを逆参照ではなく、に対してのみチェックするように注意してくださいmymultiset.end()。間接参照または過去のイテレータは未定義の動作です。)end()

于 2013-01-25T10:08:17.143 に答える