Покажите пожалуйста как это сделать красиво используя стандартный массив, очень смущает 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];
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть массив, который я пытаюсь проиграть через PlaySoundA
Возникает ошибка illegal in base/member initializer list при объявлении переменных в конструктореЛибо я не понимаю как это работает
Стандарт C++17 вводит новый элемент синтаксиса под названием structured bindingsВ скором времени применение этой фичи может стать широко распространённым...
Ошибка при рекурсиb, когда входное число больше или равно +-5000, как исправить?