C/C++

C++ Одномерный динамический массив

Изначальная задача была такая, ее решение внизу: поменять 1 и последний элемент во "2" массиве местами (с "1" массивом)

#include <iostream>

using namespace std;

int main()

{
setlocale(LC_ALL, "Russian");
int n, i, b;

cout << "введите размерность\n";
cin >> n;

int* arr = new int[n];
cout << "введите числа\n";

for (i = 0; i < n; i++) { cin >> arr[i]; }

cout << "\nвот 1 массив:\n";

for (i = 0; i < n; i++) { cout << arr[i] << ", "; }

b = arr[0];

arr[0] = arr[n - 1];

arr[n - 1] = b;

cout << "\nвот 2 массив: \n";

for (i = 0; i < n; i++) {

cout << arr[i] << ", ";

}
}
!!! Нужно сделать так, чтобы во "2" массиве все было наоборот в сравнении с "1" массивом
пример: 1 2 5 6 7
7 6 5 2 1

Желательно как-то это сделать с помощью подобного способа, если возможно
b = arr[0];
arr[0] = arr[n - 1];
arr[n - 1] = b;
Для инвертирования (обращения) массива алгоритма лучшего чем у Порыва Мрака нет. Надо только лишнюю операцию индексной арифметики убрать из цикла обращения. У меня тоже с функцией обмена элементов swap, но не своей собственной, а со стандартной, которая меня вполне устраивает:
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int n, i, b;
cout << "введите размерность\n";
cin >> n;
int *arr = new int[n];
cout << "введите числа\n";
for (i = 0; i < n; i++)
{
cin >> arr[i];
}
cout << "\nвот 1 массив:\n";
for (i = 0; i < n; i++)
{
cout << arr[i] << ", ";
}
b = n - 1;
for (i = 0; i < n / 2; i++)
swap(arr[i], arr[b - i]);
cout << "\nвот 2 массив: \n";
for (i = 0; i < n; i++)
{
cout << arr[i] << ", ";
}
cout << endl;
cin.get(); cin.get();
}
Или так:
#include <iostream>
using namespace std; int main()
{ setlocale(LC_ALL, "Russian"); int n, i, b;
cout << "введите размерность\n"; cin >> n;
int *arr = new int[n];
cout << "введите числа\n";
for (i = 0; i < n; i++) cin >> arr[i];
cout << "\nвот 1 массив:\n";
for (i = 0; i < n; i++) cout << arr[i] << ", ";
for (i = 0; i < n / 2; i++) { b = arr[i];
arr[i] = arr[n - 1 - i]; arr[n - 1 - i] = b; }
cout << "\nвот 2 массив: \n";
for (i = 0; i < n; i++) cout << arr[i] << ", ";
cout << endl; cin.get(); cin.get(); return 0; }
Александр Бабына
Александр Бабына
66 572
Лучший ответ
Юрий Афанасьев спасибо, а можно ли чем-то заменить swap?
Юрий Афанасьев Все-все, еще раз огромное спасибо
О, как!

#include <iostream>
#include <algorithm>
#include <numeric>
#include <iterator>
using namespace std;
int main() {
system("chcp 1251 > nul");
cout << "Размер массива: ";
size_t length;
cin >> length;
if (!length) exit(0);
auto box = new int[length];
auto end = box + length;
iota(box, end, 1);
copy(box, end, ostream_iterator<int>(cout, " "));
puts("");
reverse(box, end);
copy(box, end, ostream_iterator<int>(cout, " "));
puts("");
delete[] box;
system("pause > nul");
}
#include <iostream>

using namespace std;


void printArray(int *a, int k){
for(int i = 0; i < k; i++)
cout << a[i] << " ";
cout << "\n";
}

void customSwap(int &a, int &b){
int temp = a;
a = b;
b = temp;
}

int main(){
int n;
cout << "Input amount of elements in the array:\n";
cin >> n;
int *arr = new int[n];
cout << "Input elements of the array:\n";
for(int i = 0; i < n; i++)
cin >> arr[i];
cout << "Initial array is:\n";
printArray(arr, n);
for(int i = 0; i < n / 2; i++)
customSwap(arr[i], arr[n - i - 1]);
cout << "Altered array is:\n";
printArray(arr, n);
}
Юрий Афанасьев А почему здесь for(int i = 0; i < n / 2; i++) именно i < n/2 ?
ты уж определись тебе надо 1 элемент с последним в массиве поменять или развернуть его. Это далеко не одно и то же
Юрий Афанасьев 1 с последним это я сделала и написала решение задачи. Нужно "развернуть"