Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
fishec
119 / 119 / 30
Регистрация: 07.09.2013
Сообщений: 338
#1

Поменять местами элементы массива - C++

29.10.2013, 20:13. Просмотров 1741. Ответов 12
Метки нет (Все метки)

Есть указатель Mas
C++
1
void *Mas;
на массив структур вида.
C++
1
2
3
4
5
6
struct ST{
int a;
int b;
int c;
int d;
};
Нужно написать функцию, которая меняет местами структуры под номером n и m.
C++
1
2
3
4
5
6
void SWAP(int n,int m){
ST t;
t=Mas[n];
Mas[n]=Mas[m];
Mas[m]=t;
}
Я знаю что так нельзя делать)
Как мне все поля сразу поменять, чтобы вручную не надо было каждое поле менять?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2013, 20:13     Поменять местами элементы массива
Посмотрите здесь:

Поменять местами элементы массива - C++
Есть задача:Найти макс. элемент одномерного массива, минимальный и поменять местами максимальный и минимальный элемент одномерного массива....

Поменять местами элементы массива - C++
Дано одномерный массив с четным количеством элементов. Поменять местами первый элемент с последним, второй с предпоследним, и т.д. Вывести...

Поменять элементы массива местами - C++
Есть массив int mas={1,2,4,5,7,8} как поменять в нём элементы , чтобы получился массив int mas={2,1,5,4,8,7} то есть меня элементы...

Поменять местами элементы массива - C++
в двух кваратних матрицах видилено четыре сектора , ограниченные диагоналями : верхний, нижний , левый и правый . Поменять местами элементы...

Поменять местами элементы массива - C++
в заданном массиве из n элементов поменять местами элементы с n/2+1 по n: a(индекс n/2+i)=a(индекс n-i+1), i=1,...,n/2 Кто нить объяснит...

Поменять местами элементы массива - C++
Здравствуйте! В задании сказано создать динамический массив, в который пользователь сам задает числа и вывести 2-ой динамический массив без...

Поменять элементы массива местами - C++
Дан массив, элементы которого равны либо единице, либо двойке. Напишите программу, которая расставит элементы массива таким образом, чтобы...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,995
29.10.2013, 20:45     Поменять местами элементы массива #2
надо через ссылки или указатели
[/PHP]

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
 
using namespace std;
struct ST
{
int a;
int b;
int c;
int d;
};
void SWAP(ST &n,ST &m)
{
ST t;
t=m;
m=n;
n=t;
}
void print(ST x)
{
    cout<<x.a<<endl;
    cout<<x.b<<endl;
    cout<<x.c<<endl;
    cout<<x.d<<endl;
}
int main()
{
ST N={1,2,3,4};
ST M={5,6,7,8};
cout<<"N"<<endl;
print(N);
cout<<"M"<<endl;
print(M);
SWAP(N,M);
cout<<"after swap N"<<endl;
print(N);
cout<<"after swap M"<<endl;
print(M);
    return 0;
}
fishec
119 / 119 / 30
Регистрация: 07.09.2013
Сообщений: 338
29.10.2013, 20:47  [ТС]     Поменять местами элементы массива #3
А как сделать именно в том варианте, в котором я написал. В функцию передаются номера двух структур в массиве структур, указатель на который void *Mas.
dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,995
29.10.2013, 20:51     Поменять местами элементы массива #4
Цитата Сообщение от fishec Посмотреть сообщение
Есть указатель Mas
C++
1
void *Mas;
на массив структур вида.
C++
1
2
3
4
5
6
struct ST{
int a;
int b;
int c;
int d;
};
Нужно написать функцию, которая меняет местами структуры под номером n и m.
C++
1
2
3
4
5
6
void SWAP(int n,int m){
ST t;
t=Mas[n];
Mas[n]=Mas[m];
Mas[m]=t;
}
Я знаю что так нельзя делать)
Как мне все поля сразу поменять, чтобы вручную не надо было каждое поле менять?
если массив структур, то указатель будет явно не void))
смысл тот же, передаешь функции массив, его длину и индексы структур которые меняешь, только лучше заполнить массив указателями на эти структуры и менять адреса структур, так проще будет, хотя по идеет оно так и происходит...ща попробую сам не помню уже)
fishec
119 / 119 / 30
Регистрация: 07.09.2013
Сообщений: 338
29.10.2013, 20:57  [ТС]     Поменять местами элементы массива #5
У меня задание именно такое, ничего нельзя менять
ValeryS
Модератор
6539 / 5005 / 461
Регистрация: 14.02.2011
Сообщений: 16,648
29.10.2013, 21:02     Поменять местами элементы массива #6
Цитата Сообщение от fishec Посмотреть сообщение
Я знаю что так нельзя делать)
Как мне все поля сразу поменять, чтобы вручную не надо было каждое поле менять?
можно использовать
memcpy (копирование памяти)

C++
1
2
3
4
5
6
void SWAP(int n,int m){
ST t;
memcpy(&t, &Mas[n],sizeof(ST));
memcpy(&Mas[n],& Mas[m],sizeof(ST));
memcpy(&Mas[m],&t,sizeof(ST));
}
http://cppstudio.com/spravochnik/sta...nkciya-memcpy/
fishec
119 / 119 / 30
Регистрация: 07.09.2013
Сообщений: 338
29.10.2013, 21:21  [ТС]     Поменять местами элементы массива #7
Цитата Сообщение от ValeryS Посмотреть сообщение
memcpy (копирование памяти)
E2453 Size of the type 'void' is unknown or zero
E2109 Not an allowed type
Выдает такую ошибку в строках с memcpy. В чем может быть проблема?

Добавлено через 1 минуту
По сути Mas - указатель на кусок памяти, в котором подряд лежат структуры.

Добавлено через 3 минуты
Что происходит про обращении Mas[n]?
ValeryS
Модератор
6539 / 5005 / 461
Регистрация: 14.02.2011
Сообщений: 16,648
29.10.2013, 21:24     Поменять местами элементы массива #8
Цитата Сообщение от fishec Посмотреть сообщение
E2453 Size of the type 'void' is unknown or zero
E2109 Not an allowed type
говорит что у типа воид размер равен 0,так что фиг вам а не копирование
может он не может сосчитать размер структуры,хотя это странно
возьми размер экземпляра структуры
sizeof(t) вместо sizeof(ST)
а ты точно код скопировал? не написал ли случайно sizeof(&ST)?

Добавлено через 2 минуты
Цитата Сообщение от fishec Посмотреть сообщение
По сути Mas - указатель на кусок памяти, в котором подряд лежат структуры.
точно
Цитата Сообщение от fishec Посмотреть сообщение
Что происходит про обращении Mas[n]?
сдвигаемся от начала на n * размер структуры байт(n *sizeof(ST))
fishec
119 / 119 / 30
Регистрация: 07.09.2013
Сообщений: 338
29.10.2013, 21:25  [ТС]     Поменять местами элементы массива #9
Цитата Сообщение от ValeryS Посмотреть сообщение
говорит что у типа воид размер равен 0,так что фиг вам а не копирование
может он не может сосчитать размер структуры,хотя это странно
возьми размер экземпляра структуры
sizeof(t) вместо sizeof(ST)
а ты точно код скопировал? не написал ли случайно sizeof(&ST)?
Скопировал точно, подругому тоже попробавал(sizeof(t)), ошибка та же.
Сама ошибка при обращении &Mas[n].
ValeryS
Модератор
6539 / 5005 / 461
Регистрация: 14.02.2011
Сообщений: 16,648
29.10.2013, 21:28     Поменять местами элементы массива #10
а я понял понял
Цитата Сообщение от fishec Посмотреть сообщение
void *Mas;
приводить однако надо
это просто указатель он ничего не знает о структурах
как ты его приравниваешь к массиву?

Добавлено через 1 минуту
попробуй так, хотя не знаю так из голова придумал
(ST*)Mas[n]
fishec
119 / 119 / 30
Регистрация: 07.09.2013
Сообщений: 338
29.10.2013, 21:28  [ТС]     Поменять местами элементы массива #11
Цитата Сообщение от ValeryS Посмотреть сообщение
сдвигаемся от начала на n * размер структуры байт(n *sizeof(ST))
Тут void *Mas, просто указатель на кусок памяти, откуда он знает, что размер нужно брать размер именно структуры ST?
ValeryS
Модератор
6539 / 5005 / 461
Регистрация: 14.02.2011
Сообщений: 16,648
29.10.2013, 21:30     Поменять местами элементы массива #12
Цитата Сообщение от fishec Посмотреть сообщение
Тут void *Mas, просто указатель на кусок памяти, откуда он знает, что размер нужно брать размер именно структуры ST?
еще раз повторяю
приведи кусок кода где ты объявляешь массив и как его приравниваешь к Mas
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2013, 21:36     Поменять местами элементы массива
Еще ссылки по теме:

Поменять местами элементы массива - C++
Поменять местами первый и средний элемент, если количество элементов массива нечетное, и два средних элемента, если размерность массива...

Поменять местами элементы массива - C++
2).Сортировка выбором предполагает использование трёх приёмов. Второй - перестановка двух данных элементов местами. Поменяйте местами...

Поменять местами элементы массива - C++
В массиве A из N элементов поменять местами первый элемент с последним, второй - с предпоследним и т.д. #include &lt;iostream&gt; #include...

Если максимальный элемент массива А больше минимального элемента массива В, поменять данные элементы местами - C++
Задача, вроде, не сложная, может есть у кого готовая такая? Мне её на разбор надо.. Помогите, пожалуйста. Именно целиком всё, по частям я...

Поменять местами отрицательные элементы массива - C++
Привет. Была дана лаб работа с массивами. Задание было такое что вводится массив, а на выводе должно быть так, что положительные элементы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fishec
119 / 119 / 30
Регистрация: 07.09.2013
Сообщений: 338
29.10.2013, 21:36  [ТС]     Поменять местами элементы массива #13
&((ST*)Mas)[n] - такое обращение сработало) спасибо.
Yandex
Объявления
29.10.2013, 21:36     Поменять местами элементы массива
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru