Как исправить ошибку "векторные итераторы в диапазоне из разных контейнеров" в C ++? - PullRequest
0 голосов
/ 25 апреля 2019

Я не знаю, в чем проблема. Программа вылетает в этой функции. Вы можете мне помочь?

Я использую эти 2 функции для бенчмаркинга (сравнивая скорость контейнеров с различными методами ее использования). Я использую вектор "studentai" со всеми именами и фамилиями студентов. В векторе «silpni» учащиеся, итоговая оценка которых> 5. И, конечно же, «гери» со счетом <5. Эта функция хорошо работает: </p>

void atrinkimas_1(vector <duomenys>& studentai, vector <duomenys>& silpni, vector <duomenys>& geri)
{
    sort(studentai.begin(), studentai.end(), tikrinimas_gal);
    std::vector<duomenys>::iterator it = std::find_if(studentai.begin(), 
    studentai.end(), tikrinimas_5);
    std::copy(it, studentai.end(), std::back_inserter(geri));
    studentai.resize(studentai.size() - geri.size());
    std: copy(studentai.begin(), it, std::back_inserter(silpni));
    studentai.clear();
}

А это не так:

void atrinkimas_2(vector <duomenys>& studentai, vector<duomenys> &silpni)
{
    sort(studentai.begin(), studentai.end(), tikrinimas_gal);
    std::vector<duomenys>::iterator it = std::find_if(studentai.begin(), studentai.end(), tikrinimas_5);
    std::copy(it, studentai.end(), std::back_inserter(silpni));
    studentai.resize(studentai.size() - silpni.size());
}

В чем проблема?

1 Ответ

2 голосов
/ 25 апреля 2019

Изменяя размер studentai, вы лишаете законной силы it. Я предполагаю, что ошибка в том, что it больше не указывает на studentai.

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