Russian Qt Forum

Qt => Общие вопросы => Тема начата: ltise от Ноябрь 02, 2010, 18:21



Название: QList развернуть список
Отправлено: ltise от Ноябрь 02, 2010, 18:21
Подскажите плиз как развернуть порядок следования элементов в списке ?

т.е. было 1, 2, 3, 4, 5 надо 5, 4, 3, 2, 1

как нить без использования цикла.

Спасибо


Название: Re: QList развернуть список
Отправлено: Пантер от Ноябрь 02, 2010, 18:28
void QList::swap ( int i, int j )
Без цикла не получится.


Название: Re: QList развернуть список
Отправлено: merke от Ноябрь 02, 2010, 18:36
можешь использовать буферный лист в него переписать всё с самого конца до начала, а потом уже очистив первый записать в него буферный с начало до конца! и опять же без циклов не обойтись. Если конечно у тебя и есть цифры 1 2 3 . . . 8 9 и т.д. в порядке возрастания, то можешь применить алгоритмы сортироки из QAlgorithm.


Название: Re: QList развернуть список
Отправлено: ltise от Ноябрь 02, 2010, 18:56
Сделал так:

void MyList::invert()
{
   int n = size();
   int h = n/2;
   n--;
   for(int i=0; i < h; i++){
      swap(i, n-i);
   }
}

Может что эффективнее придумается ?

гонять из списка в список - тяжеловато будет.


Название: Re: QList развернуть список
Отправлено: ltise от Ноябрь 02, 2010, 19:04
можешь использовать буферный лист в него переписать всё с самого конца до начала, а потом уже очистив первый записать в него буферный с начало до конца! и опять же без циклов не обойтись. Если конечно у тебя и есть цифры 1 2 3 . . . 8 9 и т.д. в порядке возрастания, то можешь применить алгоритмы сортироки из QAlgorithm.
не, у меня указатели, причем много :)


Название: Re: QList развернуть список
Отправлено: Rcus от Ноябрь 02, 2010, 19:27
Не знаю насчет эффективности, но короче будет std::reverse(list.begin(), list.end()); :)