みなさん、
ソフトウェアに奇妙なバグを見つけました。
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つの実装は異なる動作をしますか?
実装に違いのないデータ構造にしたいのですが、可能ですか?
おそらく、この種の操作のデータ構造を変更する必要があります