Russian Qt Forum

Qt => Общие вопросы => Тема начата: kuzulis от Июнь 25, 2009, 10:49



Название: удаление записей из QList используя указатель на QList. Нужна консультация.
Отправлено: kuzulis от Июнь 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();
}
}

???


Название: Re: удаление записей из QList используя указатель на QList. Нужна консультация.
Отправлено: Авварон от Июнь 25, 2009, 11:20
если в указателе живет адрес исходного списка, то почему нет? другое дело если ты делаешь копию


Название: Re: удаление записей из QList используя указатель на QList. Нужна консультация.
Отправлено: kuzulis от Июнь 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 .. и чтобы не писать код очистки каждого - я вот подумал начсет указателя...

Хотя если посмотреть вывод (то что я привел) - то вроде так можно сделать :) (хотя - хез... )


Название: Re: удаление записей из QList используя указатель на QList. Нужна консультация.
Отправлено: Авварон от Июнь 25, 2009, 11:44
если тебе нужна всего-навсего ф-ия удаления, то передавай туда ссылку на список, зачему указатель-то?


Название: Re: удаление записей из QList используя указатель на QList. Нужна консультация.
Отправлено: kuzulis от Июнь 25, 2009, 11:50
ну у меня ф-я будет примерно так:
Код:
class My:
{
public:
void clearAllLists() { и вот тут происходить должно удаление всех записей из всех листов... }
private:
Qlist<... *> list1;
.....
QList<... *> list 10;
}
поэтому как я передам ссылку?


Название: Re: удаление записей из QList используя указатель на QList. Нужна консультация.
Отправлено: Авварон от Июнь 25, 2009, 12:17
то есть ты хочешь сделать указатель и его сдвигать при помощи адресной арифметики? вообще тогда лучше массив списков


Название: Re: удаление записей из QList используя указатель на QList. Нужна консультация.
Отправлено: ритт от Июнь 25, 2009, 12:20
qDeleteAll(...) + QList::clear()


Название: Re: удаление записей из QList используя указатель на QList. Нужна консультация.
Отправлено: kuzulis от Июнь 25, 2009, 13:21
Цитировать
то есть ты хочешь сделать указатель и его сдвигать при помощи адресной арифметики? вообще тогда лучше массив списков
ну шото подобное... если будет массив - то это будет выглятель примерно так:??
Код:
QVector<QList<TMyclass *>> array;
??? А то я запутался :)

Цитировать
qDeleteAll(...) + QList::clear()
аааааа!!! ёлки!!! так даж проще буит! спасибо! :)