我看了几个例子,据我所知,我正确地使用了拼接方法。但是,当我在Visual C ++下以调试模式运行程序时,调用堆栈显示我对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++;
}
答案 0 :(得分:1)
如果我参考互联网上的任何手册页,您似乎正在使用std::list<T>::splice()
。
相反,我真的不喜欢这行中的参考:
std::list<Rect> & lr = oldRect.split(newRect);
我不知道正在做什么Rect::split()
但您应该尝试复制其结果。这有帮助吗?