Russian Qt Forum
Ноябрь 26, 2024, 00:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: удаление записей из QList используя указатель на QList. Нужна консультация.  (Прочитано 7652 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« : Июнь 25, 2009, 10:49 »

Доброго дня!

имею например такое:
Код:
...
    QList<TMyClass *> list1;
    QList<TMyClass *> list2;
...
...
//где-то тут заполняю списки указателями на объекты TMyClass
   list1.append(new TMyClass);
   list2.append(new TMyClass);

теперь, чтобы удалить объекты из списков и очистить списки я могу сделать так: Непонимающий
Код:
QList<TMyClass *> *list=0;
TMyClass *myclass=0
...
for (int i=0;i<2;i++) {
switch (i) {
case 0: list=&list1; break;
case 1: list=&list2; break;
}
while (!list->isEmpty()) {
myclass=list->first();
if (myclass) {
//тут удаляю указатель и из списка запись
                               delete list->takeFirst();
}
}
}
...

или нельзя использовать указатель list , а удалять и очищать списки, работая именно с ними?? т.е.
Код:
		while (!list1.isEmpty()) {
myclass=list1.first();
if (myclass) {
//тут удаляю указатель и из списка запись
                               delete list1.takeFirst();
}
}
while (!list2.isEmpty()) {
myclass=list2.first();
if (myclass) {
//тут удаляю указатель и из списка запись
                               delete list2.takeFirst();
}
}

Непонимающий
Записан

ArchLinux x86_64 / Win10 64 bit
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Июнь 25, 2009, 11:20 »

если в указателе живет адрес исходного списка, то почему нет? другое дело если ты делаешь копию
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Июнь 25, 2009, 11:35 »

вот например если так:
Код:
#include <QtCore>

class TMyClass
{
public:
TMyClass() {}
int param1;
QString param2;
};

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
QList<TMyClass *> list1;
QList<TMyClass *> list2;
list1.clear();
list2.clear();
//заполняю списки
for (int i=0;i<10;i++) {
list1.append(new TMyClass);
list2.append(new TMyClass);
}
qDebug() << "Lists after appends:";
qDebug() << "list1.count()=" << list1.count();
qDebug() << "list2.count()=" << list2.count();
//удаляю записи из списков
QList<TMyClass *> *list=0;
TMyClass *myc=0;
for (int i=0;i<2;i++) {
switch (i) {
case 0: list = &list1; break;
case 1: list = &list2; break;
}
while (!list->isEmpty()) {
myc=list->first();
if (myc) {
//тут удаляю указатель и из списка запись
delete list->takeFirst();
}
}
}
qDebug() << "Lists after delete:";
qDebug() << "list1.count()=" << list1.count();
qDebug() << "list2.count()=" << list2.count();
    return app.exec();
}

выводит:
Цитировать
D:\projects\QList>release\list.exe
Lists after appends:
list1.count()= 10
list2.count()= 10
Lists after delete:
list1.count()= 0
list2.count()= 0

Цитировать
если в указателе живет адрес исходного списка, то почему нет? другое дело если ты делаешь копию

т.е? ну, если делаю копию - то будет происходить очистка КОПИИ - а не исходного списка...
....
Просто я спрашиваю потому, что у меня допустим этих исходных списков может быть штук 10 .. и чтобы не писать код очистки каждого - я вот подумал начсет указателя...

Хотя если посмотреть вывод (то что я привел) - то вроде так можно сделать Улыбающийся (хотя - хез... )
Записан

ArchLinux x86_64 / Win10 64 bit
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Июнь 25, 2009, 11:44 »

если тебе нужна всего-навсего ф-ия удаления, то передавай туда ссылку на список, зачему указатель-то?
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #4 : Июнь 25, 2009, 11:50 »

ну у меня ф-я будет примерно так:
Код:
class My:
{
public:
void clearAllLists() { и вот тут происходить должно удаление всех записей из всех листов... }
private:
Qlist<... *> list1;
.....
QList<... *> list 10;
}
поэтому как я передам ссылку?
Записан

ArchLinux x86_64 / Win10 64 bit
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #5 : Июнь 25, 2009, 12:17 »

то есть ты хочешь сделать указатель и его сдвигать при помощи адресной арифметики? вообще тогда лучше массив списков
Записан
ритт
Гость
« Ответ #6 : Июнь 25, 2009, 12:20 »

qDeleteAll(...) + QList::clear()
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #7 : Июнь 25, 2009, 13:21 »

Цитировать
то есть ты хочешь сделать указатель и его сдвигать при помощи адресной арифметики? вообще тогда лучше массив списков
ну шото подобное... если будет массив - то это будет выглятель примерно так:??
Код:
QVector<QList<TMyclass *>> array;
Непонимающий А то я запутался Улыбающийся

Цитировать
qDeleteAll(...) + QList::clear()
аааааа!!! ёлки!!! так даж проще буит! спасибо! Улыбающийся
« Последнее редактирование: Июнь 25, 2009, 13:34 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.057 секунд. Запросов: 23.