Дан заполненный целочисленный динамический массив. Как с помощью функции memmove(ДРУГИХ СПОСОБОВ НЕ ПРЕДЛАГАТЬ!!) выполнить копирование первой половины элементов массива во вторую (N/2), а второй части в первую соответственно?
int N = 5; //число элементов
int *data = new int[N]; //сам массив
for(int i=0;i<n;i++)> = rand;}//заполнение массива
Другие языки программирования и технологии
C++. Вопрос по функции memmove()
Пример
Данная программа сдвигает содержимое массива str на 10 позиций в сторону младших адресов и выводит результат на дисплей.
#include <stdio.h>
#include <string.h>
#define SIZE 80
int main(void)
{
char str[SIZE], *p;
strcpy(str, "Когда, в случае если.. . ");
p = str + 10;
memmove(str, p, SIZE);
printf("результат сдвига: %s", str);
return 0;
}
Данная программа сдвигает содержимое массива str на 10 позиций в сторону младших адресов и выводит результат на дисплей.
#include <stdio.h>
#include <string.h>
#define SIZE 80
int main(void)
{
char str[SIZE], *p;
strcpy(str, "Когда, в случае если.. . ");
p = str + 10;
memmove(str, p, SIZE);
printf("результат сдвига: %s", str);
return 0;
}
Егор
но здесь не надо младшие разряды ставить на бывшее место страших
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
srand(time(0));
int n = 10;
int *d = new int[n];
for (int c = 0; c < n; ++c) cout << ' ' << (d[c] = rand() % 100);
cout << endl;
// используя цикл
for (int c = 0; c < n / 2; ++c) {
int tmp = d[n / 2 - c - 1];
memmove(&d[n / 2 - c - 1], &d[n / 2 - c], n / 2 * sizeof(d[0]));
d[n - c - 1] = tmp;
}
for (int c = 0; c < n; ++c) cout << ' ' << d[c];
cout << endl;
// используя дополнительный массив
int *tmp = new int[n / 2];
memmove(tmp, d, n / 2 * sizeof(d[0]));
memmove(d, d + n / 2, n / 2 * sizeof(d[0]));
memmove(d + n / 2, tmp, n / 2 * sizeof(d[0]));
for (int c = 0; c < n; ++c) cout << ' ' << d[c];
cout << endl;
// C++ style
swap_ranges(d, d + n / 2, d + n / 2);
for (int c = 0; c < n; ++c) cout << ' ' << d[c];
cout << endl;
return 0;
}
ЗЫ: учти, что для массива с нечетной длинной необходим дополнительный код, учитывающий это
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
srand(time(0));
int n = 10;
int *d = new int[n];
for (int c = 0; c < n; ++c) cout << ' ' << (d[c] = rand() % 100);
cout << endl;
// используя цикл
for (int c = 0; c < n / 2; ++c) {
int tmp = d[n / 2 - c - 1];
memmove(&d[n / 2 - c - 1], &d[n / 2 - c], n / 2 * sizeof(d[0]));
d[n - c - 1] = tmp;
}
for (int c = 0; c < n; ++c) cout << ' ' << d[c];
cout << endl;
// используя дополнительный массив
int *tmp = new int[n / 2];
memmove(tmp, d, n / 2 * sizeof(d[0]));
memmove(d, d + n / 2, n / 2 * sizeof(d[0]));
memmove(d + n / 2, tmp, n / 2 * sizeof(d[0]));
for (int c = 0; c < n; ++c) cout << ' ' << d[c];
cout << endl;
// C++ style
swap_ranges(d, d + n / 2, d + n / 2);
for (int c = 0; c < n; ++c) cout << ' ' << d[c];
cout << endl;
return 0;
}
ЗЫ: учти, что для массива с нечетной длинной необходим дополнительный код, учитывающий это
Похожие вопросы
- C++ Указатели и функции.
- Вопрос по функции rand srand c++
- Помогите написать программу на c++ С использованием функций
- Вопросы про функции. За лучший и полный ответ 50 баллов
- вопрос про массив одномерный C++ (вопрос отредактирован)
- Вопрос про функции (с++)
- C++ структуры и функции
- Почему в C++ передача аргумента функции по значению считается более быстрой, чем по ссылке?
- C++ Вопросы
- C++. Вопрос