私はいくつかの例を見て、スプライス方法を正しく使用しているかどうかを確認しました。私は、Visual C++の下でデバッグモードでプログラムを実行するとただし、コールスタックをスプライスするために私の呼び出しは最終的にそれがクラッシュし、このラインに達して示していますstd :: list.splice()によってプログラムがクラッシュする
_Mynextiter = _Parent_proxy->_Myfirstiter;
コード:
for(std::list<Rect>::iterator i = rects.begin(); i != rects.end();)
{
if(i->isOverlapping(newRect))
{
Rect oldRect = (*i);
i = rects.erase(i);
std::list<Rect> & lr = oldRect.split(newRect);
//doesn't work either
//rects.splice(rects.begin(), lr, lr.begin(), lr.end());
rects.splice(rects.begin(), lr);
}
else i++;
}
おそらくhttp://stackoverflow.com/questions/143156/splice-on-stdlist-and-iterator-invalidationに関連しています –
'Rect :: split(Rect&)' ?? – Joe
ジョーってどういう意味ですか? – stands2reason