Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 57
1

Vector : iterator & erase

14.01.2018, 15:31. Показов 3520. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток! Необходимо пройтись по двум векторам и удалить схожие элементы. Но после первого удаления возникает исключение итератора - _DEBUG_ERROR("vector iterator not incrementable");. Код прилагаю, всем заранее спасибо!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vector<int>::iterator i = A_prime.begin();
    vector<int>::iterator j = N_prime.begin();
    int counter = 1;
    for (; i <= A_prime.end(); i++)
        for(; j <= N_prime.end(); j++)
            if (*i == *j)
            {
                if (counter == N)
                    N_prime.erase(j);
                A_prime.erase(i);
                counter ++;
                break;
            }
    if (A_prime.empty() == true)
        return true;
    else
        return false;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2018, 15:31
Ответы с готовыми решениями:

Erase vector; iterator
for (int k = 0; k &lt; passengers.size(); k++) { int *dst_floor_end = NULL; int ucf =...

Vector <bool> erase iterator outside range
Помогите, пожалуйста. При компиляции появляется ошибка (фото ниже). Это реализация алгоритма...

Ошибка “vector<bool> erase iterator outside range” при работе алгоритма Хаффмана
Проблема с функцией BuildTable. Компилируется, но в процессе работы возникает ошибка. //...

Вызов исключения " vector erase iterator outside range"
В первой же итерации цикла просходит вызов исключения на 8 строчке кода : &quot; vector erase iterator...

6
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
14.01.2018, 16:45 2
после erase итератор становится невалидным
0
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 57
14.01.2018, 18:12  [ТС] 3
igorrr37, указать итератор на начало или на какой элмент лучше?
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
14.01.2018, 19:01 4
Лучший ответ Сообщение было отмечено ronny10 как решение

Решение

erase возвращает итератор на элемент, который следует за удаляемым. Можно указать на него
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int counter = 1;
    for (vector<int>::iterator i = A_prime.begin(); i <= A_prime.end(); i++)
    {
        for (vector<int>::iterator j = N_prime.begin(); j <= N_prime.end(); j++)
        {
            if (*i == *j)
            {
                if (counter == N)
                {
                    j = N_prime.erase(j);
                }
                i = A_prime.erase(i);
                --i;
                counter++;
                break;
            }
        }
    }
    
    if (A_prime.empty() == true)
        return true;
    else
        return false;
1
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 57
14.01.2018, 19:22  [ТС] 5
igorrr37, спасибо так работает, но для себя хотел бы уточнить, когда не остается элементов что вернется итератору от erase?
0
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
14.01.2018, 22:40 6
Вернёт A_prime.end()

Добавлено через 3 часа 14 минут
И ещё - запись
C++
1
for (vector<int>::iterator i = A_prime.begin(); i <= A_prime.end(); i++)
приведёт к выходу за пределы вектора. Нужно
C++
1
for (vector<int>::iterator i = A_prime.begin(); i != A_prime.end(); i++)
или i < A_prime.end()
1
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 334
08.03.2019, 21:02 7
C++
1
2
3
4
5
6
        list.sort();
    while (!list.empty()) {
        index = list.back();
        vector.erase(vector.begin() + index);
        list.pop_back();
    }
корректно ли пройдет удаление элементов из вектора?
в list список индексов которые надо убить + отсортировано, т.е удаляем у вектора с конца.

проход по листу норм вариант) или лучше итераторы использовать? (список все равно надо будет очищать)
код не тестировал, так начертил эскизик пока.
0
08.03.2019, 21:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2019, 21:02
Помогаю со студенческими работами здесь

Странная ошибка invalid initialization of non-const reference of type 'std::vector<oneVec>::iterator&
Пишу я значит двухмерный вектор, решаю проверить наличие ошибок(я просто компилирую) и выдают такую...

Vertor erase iterator outside range
Всем привет! Пытаюсь разобраться с кодом алгоритма шифрования методом Хаффмана, и наткнулся на...

vector<T> template vector<T>::iterator
Здраствуйте! При написании вектора столкнулся с проблемой такого рода: вот код вектора template...

vector::erase()?
есть вектор структур struct person{ string name; int age; vector &lt;person&gt; repw;


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru