как удалить динамически созданный объект
Во время выполнения программы при нажатии на кнопку создаю Image-и и называю их i0,i1,i2,i3,i4 (соответственно с их индексом в массиве)
вооотт...получается масссив Image-ей.
теперь необходимо при двойном клике на определенном Image-е удалить его. (ну например i2)
получается, как я понимаю, следующая цепочка i0,i1,_,i3,i4
А как сделать чтобы получилось i0,i1,i2,i3
Подмогните кто знает ...плз.
Во время выполнения программы при нажатии на кнопку создаю Image-и и называю их i0,i1,i2,i3,i4 (соответственно с их индексом в массиве)
вооотт...получается масссив Image-ей.
теперь необходимо при двойном клике на определенном Image-е удалить его. (ну например i2)
получается, как я понимаю, следующая цепочка i0,i1,_,i3,i4
А как сделать чтобы получилось i0,i1,i2,i3
Если я правильно понял твой вопрос, то ничего кроме ручного копирования предложить не могу.
Т.е. Если ты удаляешь компонент из середины масива тебе надо сдвинуть все лежащие ниже него компоненты на 1 вверх. Обычный цикл. Причем учитывая, что ты будешь присваивать указатели это даже будет быстро работать.
Если я правильно понял твой вопрос, то ничего кроме ручного копирования предложить не могу.
Т.е. Если ты удаляешь компонент из середины масива тебе надо сдвинуть все лежащие ниже него компоненты на 1 вверх. Обычный цикл. Причем учитывая, что ты будешь присваивать указатели это даже будет быстро работать.
ты меня правильно порнял........
И я понимаю что вроде все должно быть просто...
но у меня почемуто ничего не получается :(
если я удаляю первый раз то все срабатывает, а вот второй раз уже нет...
+ к этому еще пару заморочек, но это пока не важно
ты меня правильно порнял........
И я понимаю что вроде все должно быть просто...
но у меня почемуто ничего не получается :(
если я удаляю первый раз то все срабатывает, а вот второй раз уже нет...
+ к этому еще пару заморочек, но это пока не важно
Хм.... А что именно не получается?
У тебя есть массив указателей.
Допустим их 5 штук u0,u1,u2,u3,u4
Тебе надо удалить u1.
Твои действия:
1 Проверка не является ли данный элемент последним?
Если да, то просто удаляешь.
Если нет то:
{
2 Цикл от следующего за удаляемым элементом до последнего
где u[предыдущий] = u[текущий]
3 Удаление последнего элемента.
}
Конечно приведенный мной метод не блещет оригинальностью, но во всяком случае он должен работать.
Например, vector.
Ну а что на счет использования стандартных контейнеров?
Например, vector.
Ну это можно конечно. А еще есть шаблоны динамических массивов и тот же стрингрид по моему можно как динамический список исползовать. Но это уже будет не самый простой способ :)
Ну это можно конечно.
А еще есть шаблоны динамических массивов и тот же стрингрид по моему можно как динамический список исползовать. Но это уже будет не самый простой способ :)
А в чем проблема использования вектора?
Что такое "шаблоны динамических массивов" ?
А в чем проблема использования вектора?
Что такое "шаблоны динамических массивов" ?
Странные вы) Говорить об одном и том же))
Вектор и является шаблоном динаимческого массива)
STL - стандартная библиотека шаблонов.
Странные вы) Говорить об одном и том же))
Вектор и является шаблоном динаимческого массива)
STL - стандартная библиотека шаблонов.
Откуда такое определение "шаблоном динаимческого массива"?
Вектор - контейнер, не массив.
P.S. Ну и занудство... :D
Откуда такое определение "шаблоном динаимческого массива"?
Вектор - контейнер, не массив.
P.S. Ну и занудство... :D
Cогласен.
получаем:
к примеру у нас было 5 элементов в массиве на данный момент и нужно удалить n элемент то делаем так
выделенные так
CImage* ar=new CImage[5];
for(int i=0;i<5;i++) ar=new CImage(x,u...);
bool DeleteItem(CImage* ar,UINT pos,UINT TotalCount)
{
if(pos>TotalCount-1) return 0;
delete ar[pos];
if(pos!=TotalCount-1)
{
memcpy(&ar[pos],&ar[pos+1],sizeof(CImage)*(TotalCount-pos-1));
}
return 1;
}
где нить вызываем так:
UINT g_Count=5;//глобальная переменная
//нам нужно удалить второй элемент с массива
if(DeleteItem(ar,1,Count)) g_Count--;
Хотя конечно лучше использовать vector в данном случае