Как сделать реверс масива на С++?

Как сделать реверс всех чисел массива между двумя числами?

Есть два элемента массива x и y. Между ними есть несколько чисел. Нужно все числа которые находятся после x и перед y реверснуть.
  • Вопрос задан
  • 1297 просмотров
Пригласить эксперта
Ответы на вопрос 3
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Если это задание, то вот в тупую. Читабельно и просто.

void Reverse (int *a, int x, int y) { 
  int i = y+1;
  int j = x-1;
  while (i < j) {
    int tmp = a[i];
    a[i] = a[j];
    a[j] = tmp;
    i++;
    j--;
  }
}


Или, если хочется, можно покороче:
for (int i=x+1, j = y-1; i < j; i++, j--) {
  std::swap(a[i], a[j]);
}


Или совсем просто, если это не задание а для дела нужно:
std::reverse( &a[x+1], &a[y]);

Только надо обязательно проверить, что x < y - что есть что разворачивать.
Ответ написан
Если у вас не получилось адаптировать пример Илья Николаевский, вот пример с числовым массивом из первого примера упоминаемого ответа с некоторыми изменениями.
#include <iostream>

void reverse(int *a, const int x, const int y) {

	int i = x + 1;
	int j = y - 1;
	int tmp = 0;

	while(i < j) {
		tmp = a[i];
		a[i] = a[j];
		a[j] = tmp;
		i++;
		j--;
	}
}

int main() {

	int a[] = {16, 8, 3, 5, 2021, 2016, 1, 500, 15, 8, 7, 1914, 27};

	// Here we output the source array
	for(auto elt: a) {
		std::cout << elt << ' ';
	}

	// Delimiter for arrays
	std::cout << '\n';

	reverse(a, 0, 5);

	// Here we output the changed array
	for(auto elt: a) {
		std::cout << elt << ' ';
	}

	return 0;
}

Результат:
16 8 3 5 2021 2016 1 500 15 8 7 1914 27
16 2021 5 3 8 2016 1 500 15 8 7 1914 27
Ответ написан
Комментировать
NQUARE
@NQUARE
Используй std::reverse(&arr[x + 1], &arr[y]);
E.D: А не между именно числами x и y в массиве а не индексами arr[x] и arr[y]??
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы