![]() |
|
Модераторы: bsa |
![]()
|
|
| jey7 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.1.2010 Репутация: нет Всего: нет |
Стоит такая задача есть динамический масссив
struct reader{ ...... ...... ..... } int size=10; reader *arr=new reader[size]; Теперь мне надо передать в функцию массив и дописать в него еще элементы, значит нужно и увеличить его (значит я так понимаю скопировать старый в новый который будет больше) функция void add (reader *arr, int size){ ??? } Это сообщение отредактировал(а) jey7 - 7.1.2010, 13:48 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
| jey7 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.1.2010 Репутация: нет Всего: нет |
Да мы не проходили vector, все должно быть на структурах и операторе new |
|||
|
||||
| Metalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 635 Регистрация: 22.10.2008 Где: Украина-ZPсity Репутация: нет Всего: нет |
а ты сам пройди)
-------------------- Don't let the system get you down. |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
Раз уж вектор низя, то: создавать массив через malloc, изменять размер realloc-ом, копировать - memcpy. Это все в случае, если в структуре reader простые данные.
Добавлено через 54 секунды Metalex, нас, помнится, тоже сначала учили работать без stl;). -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| jey7 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.1.2010 Репутация: нет Всего: нет |
struct { char Name[15]; char Surname[15]; char Patronymic[15]; float Datebirthday; int Passport; int Id; int Number; library List[5];} |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
library - ?
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| jey7 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.1.2010 Репутация: нет Всего: нет |
libruary это вторая структура ( в которой находятся книги), читатель (reader) должен хранить в себе список книг которые у него на руках. |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
jey7, если library тоже простая, то можно смело делать так, как я писал. Под простотой я подразумевал отсутствие указателей на смежные поля. Вообще правильно это называется "плоский тип".
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| jey7 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.1.2010 Репутация: нет Всего: нет |
такое тоже мы не проходили, подскажите как правильно: создание reader *arr = (reader *)malloc(sizeof(reader));// а где задать размер массива? или : arr2=(reader*)malloc(sizeof(reader)*size_2); изменение arr2=(reader*)realloc(arr2, sizeof(reader)*size_2); если realloc увеличивает , тогда мне не нужно копирование? (если старые значения сохран в массиве) Просто мне надо например уже в заполненный массив читателей, добавить нового. (значит нужно просто увеличить размерность, с сохранение старых значений) |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
Про malloc: если size_2 - это размер массива в штуках, то да. Обращение к структурам - как к в "обычном" массиве, т.е. arr2[i] - обращение к i-ому читателю.
Про realloc: все правильно, вторым параметром указывается новый размер блока памяти в байтах, т.е. sizeof(reader)*size_2, где size_2 - новый размер массива в штуках. При увеличении вручную копировать ничего не нужно. Также realloc-ом можно и уменьшить массив, если потребуется. >Просто мне надо например уже в заполненный массив читателей, добавить нового. Да, тут просто realloc. А memcpy и memmove испоьзуйте, если вам потребуется скопировать массивы куда-нибудь или к концу одного дописать другой или что-то еще в этом духе. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| jey7 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.1.2010 Репутация: нет Всего: нет |
компилятор ругается на arr2? он не понимает что arr2 относится к reader. error C2065: 'arr2' : undeclared identifier. Я что то пропустил? приходится дописывать reader * arr2=(reader*)malloc(sizeof(reader)*size_2); - это правильно Это сообщение отредактировал(а) jey7 - 7.1.2010, 16:00 |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
struct reader *arr2=...;
Добавлено через 1 минуту и 17 секунд Т.е. вы пропустили объявление переменной. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| jey7 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.1.2010 Репутация: нет Всего: нет |
да все работает, класс
Еще вопрос по теме, подскажите как мне в reader быть с library List[5]; заполнение у меня работает с помощью strcpy (arr2[i].Patronymic,patronymic); как мне заполнить reader который обращается к library.? strcpy (arr2[i].List.Name,????)(library уже хранит в себе книги, у нее массив arr использ.) Это сообщение отредактировал(а) jey7 - 7.1.2010, 20:14 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
jey7, для подобных целей используются, обычно, (двусвязные) списки, а не массивы. Так как операции добавления удаления в них очень дешевые (в отличие от массивов), а плата - 2 дополнительных указателя на каждый элемент списка. В случае с книгами, то их лучше хранить в отдельном списке, который находится вне объекта читателя. А в объекте читателя уже должен находиться список указателей на книги... Список, конечно, сделать сложней, чем массив, зато работать будет быстрей да и указателями на его элементы можно пользоваться спокойно без опасения, что они "одичают" (станут невалидными).
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |