Почему я не могу изменить вектор внутри экземпляра объекта? - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть список объектов, и я пытаюсь удалить первый элемент вектора в каждом из этих объектов. То, как я пытался это сделать, продолжает вызывать исключение.

Я пытался использовать функции get, но это не работает? Это потому, что функция get может возвращать копию вместо фактической?

void Interpreter::createQueryList()
{
    queryList = datalogProgram.getQueries();

    for (unsigned int i = 0; i < queryList.size(); ++i)
    {
        queryList.at(i).getParamList().erase( queryList.at(i).getParamList().begin());
        queryList.at(i).getBoolList().erase( queryList.at(i).getBoolList().begin());
    }

}

1 Ответ

1 голос
/ 08 ноября 2019

Если getParamList() возвращает копию, как вы говорите, то getParamList().erase возвращает копию, как и getParamList().begin(). Но begin() - это итератор во второй копии, а не в первой. Стирание итератора из другого контейнера - это неопределенное поведение, которое гораздо хуже, чем просто удаление элемента из временной копии.

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