Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление элемента массива 
:(
    Опции темы
jey7
Дата 7.1.2010, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.1.2010

Репутация: нет
Всего: нет



Мы уже разобрались как создать и изменить размер массива

создание:
reader *arr2=(reader*)malloc(sizeof(reader)*size_2);
изменение размера:
arr2=(reader*)realloc(arr2, sizeof(reader)*size_2);

А как быть если мне нужно удалить один элемент массива???
PM MAIL   Вверх
Cheloveck
Дата 7.1.2010, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 5
Всего: 32



Сдвинуть все элементы на один влево, затерев тот, что нужно удалить (естественно копированием). Ну, если ещё и память нужно подчистить сразу (хотя зачем?) можно и realloc вызвать. Теоретически, если размер меньше, то массив должен остаться на прежнем месте.


--------------------
user posted image
PM Jabber   Вверх
jey7
Дата 7.1.2010, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.1.2010

Репутация: нет
Всего: нет



Отсюда вопрос как копировать?
PM MAIL   Вверх
zim22
Дата 7.1.2010, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



почленно


--------------------
PM MAIL   Вверх
jey7
Дата 7.1.2010, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.1.2010

Репутация: нет
Всего: нет



Цитата(zim22 @ 7.1.2010,  22:15)
почленно

Вместительно. 
Можно подробнее
PM MAIL   Вверх
zim22
Дата 7.1.2010, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Cheloveck @  7.1.2010,  20:01 Найти цитируемый пост)
Сдвинуть все элементы на один влево, затерев тот, что нужно удалить (естественно копированием)

Цитата(jey7 @  7.1.2010,  22:09 Найти цитируемый пост)
Можно подробнее

Код

int *array = new int[5];
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;

// "удалим" элемент с индексом 2
int elementIndexToRemove = 2;
// для этого сместим все элементы на один влево, 
//начиная с позиции elementIndexToRemove
for (int i = elementIndexToRemove; i != 4; ++i)
  array[i] = array[i + 1];


Это сообщение отредактировал(а) zim22 - 7.1.2010, 23:19


--------------------
PM MAIL   Вверх
jey7
Дата 7.1.2010, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.1.2010

Репутация: нет
Всего: нет



Цитата(zim22 @ 7.1.2010,  23:19)

int *array = new int[5];
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;

// "удалим" элемент с индексом 2
int elementIndexToRemove = 2;
// для этого сместим все элементы на один влево, 
//начиная с позиции elementIndexToRemove
for (int i = elementIndexToRemove; i != 4; ++i)
  array[i] = array[i + 1];
[/code]

Впринципе работает, только массив нужно уменьшать, после такого насколько я понял
PM MAIL   Вверх
Cheloveck
Дата 8.1.2010, 03:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 5
Всего: 32



Цитата(jey7 @  7.1.2010,  23:50 Найти цитируемый пост)
Впринципе работает, только массив нужно уменьшать, после такого насколько я понял 


Цитата(Cheloveck @  7.1.2010,  21:01 Найти цитируемый пост)
Ну, если ещё и память нужно подчистить сразу (хотя зачем?) можно и realloc вызвать. Теоретически, если размер меньше, то массив должен остаться на прежнем месте. 


А если потом захочешь добавить, то снова реаллочить надо будет. Только помни, что пр реаллоке в большую сторону память, чаще всего, выделяется заново, то есть копируется весь массив в новое место.

P.S. а почему malloc? Ты на Си пишешь или на C++?


--------------------
user posted image
PM Jabber   Вверх
jey7
Дата 9.1.2010, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.1.2010

Репутация: нет
Всего: нет



Цитата(Cheloveck @ 8.1.2010,  03:27)
P.S. а почему malloc? Ты на Си пишешь или на C++?

Вообще курс си , но многое используется с с++, так вот так вот.
PM MAIL   Вверх
bsa
Дата 10.1.2010, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(jey7 @  7.1.2010,  23:50 Найти цитируемый пост)
Впринципе работает, только массив нужно уменьшать, после такого насколько я понял 

Обычно, массивы не уменьшают при уменьшении количества элементов. Так как операции выделения/освобождения памяти достаточно медленные, то даже выделяют с запасом (например, std::vector, когда ты в него добавляешь данные, а буфер у него закончился, то он выделяет память под новый буфер, который в 2 раза больше закончившегося).
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0589 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.