16

みなさん、

ソフトウェアに奇妙なバグを見つけました。

std :: setから要素を削除するwhileループ内で、コンテナーが空になるまで常に最初の要素を取得したいと思います。

std::set< int*> nodes;
// Fill nodes 
for (int i=0; i<10;i++)
   nodes.insert(new int);
//
while (!nodes.empty())
{
int* pivot  = (*nodes.begin());
// do some operation with pivot erasing some elements from nodes
}

この方法で最初の要素を実装すると、gccでは機能しますが、MSVCでは機能しないことがわかりました(*nodes.begin())。イテレーターを逆参照しようとすると、クラッシュします。

std :: setの2つの実装は異なる動作をしますか?

実装に違いのないデータ構造にしたいのですが、可能ですか?

おそらく、この種の操作のデータ構造を変更する必要があります

4

2 に答える 2

2

コードはVS2010でうまく機能しますが、vccを更​​新する必要があります。

于 2012-04-27T13:45:01.870 に答える