@artur_agishev

Как удалять элементы массива?

Как удалить элементы по индексу? Например есть два индекса l r и нужно чтобы в массиве не было элементов от l до r включительно. Помогите пожалуйста
for (long long i = l - 1; i < r; ++i)			
  	s1[i] = s1[i + 1];

вот мой код
  • Вопрос задан
  • 129 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
По хорошему, вы должны использовать std::vector. А он умеет удалять все сам.

std::vector<int> a = {1, 2 ,3 ,4 ,5};
// Удалит элементы с l по r (l включительно, не удалит r).
// Если надо удалить r-ый элемент, то добавьте +1 во второй аргумент.
a.erase(a.begin()+l, a.begin()+r);


Если же вы хотите делать руками, то надо просто посмотреть, куда двигаются элементы. Те, что до l - не двигаются. Те, что от l до r - исчезают. Те, что после r сдвигаются влево на r-l+1 позиций.

for (i = l; i < n - 1 + l - r; ++i) {
  a[i] = a[i + r - l + 1];
}
// New length: n -1 + l - r;
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
resolut1123
@resolut1123
Студент
Ну наверное самым легким будет способ с перезаписью уже в другой массив.
1. Сначала заполняешь первоначальный массив.
2. берёшь цикл из заполнения, помещаешь в него условие (Если i<l && r<n) n -конечное число массива, то добавляешь счётчик таких элементов, исходя из этого счётчика будет понятно сколько элементов будет в новом массиве.
3. объявляешь новый массив допустим, array[k],потому что в прошлом цикле счётчик таких элементов был k++.
4. С таким же условием (Если i<l && r<n) заполняешь уже значения элементов в массив.
Как-то так, возможно нужно будет поиграться с условиями, но принцип я думаю понятен. Звучит долго но на самом деле займёт 5 минут...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы