Мне нужно написать програму которая с вектора удаляет диапазон значений. Мой код:
std::vector<int> vector = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int begin = 2;
int end = 4;
for (int index = begin; index <= end; )
{
vector.erase(vector.begin() + index);
}
Я так понимаю мне нужно удалить с одного и того же индекса значения - количество диапазона . Но у меня крешится програма. Что не так?
P.S да через erase можно диапазон удалить. но мне свое нужно написать
Новое:
for (int index = begin; index <= end; ++index)
{
vector.erase(vector.begin() + index);
}
for (int index = begin; index <= end; )
{
vector.erase(vector.begin() + index);
}
Здесь ошибка в том, что index
и end
в цикле не меняются, поэтому цикл выполняется бесконечно, конечно, пока не упадет приложение.
for (int index = begin; index <= end; ++index)
{
vector.erase(vector.begin() + index);
}
В этом коде ошибка состоит в том, что индекс меняется на единицу, а поэтому удаление элементов проходит через один, ведь после удаления все элементы сдвинулись, а мы это не учитываем.
Конечно же, лучше использовать версию erase для удаления диапазона:
vector.erase(vector.begin() + begin, vector.begin() + (end + 1));
Но раз нужно удалять диапазон по одному элементу, и использовать индексы, то можно сделать так:
for (int index = begin; index <= end; ++index)
{
//После удаления элементы сдвинуться,
//и новый удаляемый элемент будет на той же позиции,
//поэтому добавляем begin, а не index
vector.erase(vector.begin() + begin);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
есть задача загрузить загрузить данные с api, обработать и передать список в mainActivityПервый раз когда загружаю данные все работает отлично - при...
У меня есть простенький чат написанный на javaСервер для него я запустил на линуксе, а клиент подключается с компьютера на windows