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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вставка/удаление элементов в динамический массив 
:(
    Опции темы
Atanvarno
Дата 6.4.2008, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Задача: реализовать функции вставки/удаления элементов из динамического массива
Не понимаю, возможно ли в функции изменить  размер массива.
ЗЫ можно использовать только стандартные массивы.
PM MAIL   Вверх
bsa
Дата 6.4.2008, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Atanvarno
Во-первых, какой язык программирования?
Во-вторых, ты уж определись, тебе нужны "стандартные массивы" (под этим словом ты понимаешь статические (int array[10])?) или "стандартные функции".
В-третьих, размер динамического массива можно менять. Для этого в Си существует функция realloc(), а в Си++ - std::vector::resize().
PM   Вверх
Atanvarno
Дата 6.4.2008, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Язык программирования С++, массивы да, самые обычные c-шные. Использовать надо new/delete
Никакой библиотеки alloc.h быть не должно.
Векторы тоже использовать недопустимо - это чётко прописано в условии задачи.
ЗЫ Вставка/удаление должны быть реализованы в отдельных функциях, которые в качестве параметра получают указатель на исходный массив.

Это сообщение отредактировал(а) Atanvarno - 6.4.2008, 21:54
PM MAIL   Вверх
bsa
Дата 7.4.2008, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



в С/С++ alloc.h нет. Поэтому его и использовать не получится.
Во-первых, ты должен написать функцию переноса данных. Логично, ее сделать так:
Код
template<typename T, typename SizeType>
void myCopy(T* to, const T* from, SizeType count)
{
    while(count--) {
        *to = *from;
        ++to;
        ++from;
    }
}
Во-вторых, ты должен написать функцию увеличения размера массива:
Код
template<typename T, typename SizeType>
void myResize(T* &array, SizeType old_size, SizeType new_size)
{
    if (new_size > old_size) {
       T *tmp = new T[new_size];
       myCopy(tmp, array, old_size);
       delete []array;
       array = tmp;
    }
}
Затем функцию вставки, ее задача в нужном месте массива сделать дырку, для этого она должна увеличить размер этого массива на нужное количество элементов, затем перенести все, что должно быть после дырки в конец массива, и в начало дырки скопировать вставляемые данные.
С удалением поступать надо аналогично, только наоборот.
PM   Вверх
Atanvarno
Дата 8.4.2008, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо большое!
Но можно ещё вопрос?
Как правильно "прочитать"  T* &array эту конструкцию?
Указатель на ссылку на массив?
PM MAIL   Вверх
archimed7592
Дата 8.4.2008, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(Atanvarno @  8.4.2008,  00:33 Найти цитируемый пост)
Как правильно "прочитать"  T* &array эту конструкцию?

Строго говоря: ссылка на указатель, но, учитывая смысловую нагрузку идентификатора "array" этот указатель указывает на массив а не на одиночный объект.

Это сообщение отредактировал(а) archimed7592 - 8.4.2008, 09:42


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
bsa
Дата 8.4.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Atanvarno @ 8.4.2008,  00:33)
Спасибо большое!
Но можно ещё вопрос?
Как правильно "прочитать"  T* &array эту конструкцию?
Указатель на ссылку на массив?

Как правильно заметил archimed7592 это именно ссылка на указатель на массив. Я даже специально прилепил звездочку и амперсанд к нужным местам, чтобы не запутать. Ее задача позволить изменить адрес исходного массива.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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