std :: list.splice () вызывает сбой программы - PullRequest
1 голос
/ 14 февраля 2012

Я посмотрел несколько примеров и, насколько я могу судить, я правильно использую метод соединения.Однако, когда я запускаю программу в режиме отладки под Visual C ++, стек вызовов показывает, что мой вызов сплайсинга в конечном итоге достигает этой строки, где происходит сбой:

_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++;
    }

1 Ответ

1 голос
/ 14 февраля 2012

Кажется, вы правильно используете std::list<T>::splice(), если я ссылаюсь на какие-либо справочные страницы в Интернете.

Наоборот, мне не очень нравится ссылка в строке:

std::list<Rect> & lr = oldRect.split(newRect); 

Я не знаю, что делает Rect::split(), но вы должны попытаться скопировать его результат.Это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...