Покажите пожалуйста как это сделать красиво используя стандартный массив, очень смущает int *_arr = new int[len]; <- вообще честно говоря жутковатый синтаксис, объясните его пожалуйста, почему нельзя просто написать int _arr[len];
Почему место for (int i = 0; i < len; i++) _arr[i] = arr[i]; я не могу просто передать копию _arr = arr ?
include <iostream>
using std::cout;
using std::endl;
void reversed(int *arr, int len);
int main() {
int arr[] = { 1,2,3,4,5,6,7,8,9 };
reversed(arr, 9);
for (int i = 0; i < 9; i++) cout << arr[i];
getchar();
}
void reversed(int *arr, int len) {
int *_arr = new int[len];
for (int i = 0; i < len; i++) _arr[i] = arr[i];
for (int i = 0; i < len; i++) {
arr[i] = _arr[(len - 1) - i];
}
}
почему нельзя просто написать int _arr[len];
В языке С++ размеры в объявлениях массивов должны быть Целочисленными Константными Выражениями, т.е. попросту выражаясь целыми константами времени компиляции. В вашем случае len не является константой времени компиляции. Это означает, что объявить массив int _arr[len] вы не сможете. Создать массив размера len в С++ можно только через динамическое выделение памяти, либо явно (напр. через new[]), либо неявно (напр. через std::vector).
Однако задача реверса массива запросто решается in-place, без заведения дополнительного массива-копии. Поэтому метод создания дополнительного массива к данной теме не должен иметь никакого отношения вообще.
@AnT Спасибо за наводку.
Так можно делать без копии массива:
void reversed(int *arr, int len) {
for (int i = 0, j = len - 1; i<j; i++, j--){
arr[i] = arr[i] + arr[j];
arr[j] = arr[i] - arr[j];
arr[i] = arr[i] - arr[j];
}
}
Продвижение своими сайтами как стратегия роста и независимости