Автор Тема: Сортировка списка указателей.  (Прочитано 3279 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Film

  • Постоянный читатель
  • Пол: Мужской
Re: Сортировка списка указателей.
« Ответ #15 : 13 Июля 2014, 23:11:17 »
но дубликаты ловить так и не хочет :((
Захожу сюда редко.

Оффлайн android

  • Авторитет
Re: Сортировка списка указателей.
« Ответ #16 : 13 Июля 2014, 23:19:20 »
но дубликаты ловить так и не хочет :((
Во втором цикле присваивай значение первого и увеличивай на шаг. Должно работать.
list<int*>::iterator i2=i1;
for(i2++; i2 != l_list.end(); ++i2)

Оффлайн Film

  • Постоянный читатель
  • Пол: Мужской
Re: Сортировка списка указателей.
« Ответ #17 : 14 Июля 2014, 00:11:59 »
но дубликаты ловить так и не хочет :((
Во втором цикле присваивай значение первого и увеличивай на шаг. Должно работать.
list<int*>::iterator i2=i1;
for(i2++; i2 != l_list.end(); ++i2)

Так если сортировка работает, то проще использовать adjacent_find быстрее будет, но опять указатели жизнь портят. С простыми списками adjacent_find работает у меня нормально, но как только вставляю список ссылок указателей, ничего не работает. :((
« Последнее редактирование: 14 Июля 2014, 00:42:01 от Film »
Захожу сюда редко.

Оффлайн Film

  • Постоянный читатель
  • Пол: Мужской
Re: Сортировка списка указателей.
« Ответ #18 : 14 Июля 2014, 00:18:54 »
Во втором цикле присваивай значение первого и увеличивай на шаг. Должно работать.
list<int*>::iterator i2=i1;
for(i2++; i2 != l_list.end(); ++i2)

А за подсказку спасибо еще раз, работает. Не перевелись еще настоящие С++ программисты в нашем городе. )))
Захожу сюда редко.

Оффлайн DoReMi

  • Админы
  • *****
  • Пол: Мужской
    • БЛОГОДОРЕМИЕ
Re: Сортировка списка указателей.
« Ответ #19 : 14 Июля 2014, 04:27:29 »
Не перевелись еще настоящие С++ программисты в нашем городе.

Трогательно прослезился :)
Вы держитесь здесь,  вам всего доброго, хорошего настроения, здоровья. ©

Оффлайн JktuAbk

  • Знакомое лицо
Re: Сортировка списка указателей.
« Ответ #20 : 14 Июля 2014, 08:43:58 »
Так то он не в горде у нас уже давно...

Оффлайн mksap

  • Авторитет
  • Пол: Мужской
Re: Сортировка списка указателей.
« Ответ #21 : 14 Июля 2014, 10:52:42 »
В НПИ (Новочеркасск) решили перейти с Borland C++ 3.0 на Dev C++, каково было удивление 70-летнего доцента, когда ни одна его программа из методички не скомпилировалась :)
Миша, а почему ты такой добрый и спокойный?
- Все просто! Я по воскресеньям в людей стреляю!

Оффлайн DoReMi

  • Админы
  • *****
  • Пол: Мужской
    • БЛОГОДОРЕМИЕ
Re: Сортировка списка указателей.
« Ответ #22 : 14 Июля 2014, 12:55:45 »
Грех смеяться над стариком! :)
Вы держитесь здесь,  вам всего доброго, хорошего настроения, здоровья. ©

Оффлайн Film

  • Постоянный читатель
  • Пол: Мужской
Re: Сортировка списка указателей.
« Ответ #23 : 14 Июля 2014, 13:38:27 »
Не перевелись еще настоящие С++ программисты в нашем городе.

Трогательно прослезился :)

)) ну хорошо, перефразирую .... Не все еще программисты на С++ сбежали из нашего города :))
Захожу сюда редко.

Оффлайн DoReMi

  • Админы
  • *****
  • Пол: Мужской
    • БЛОГОДОРЕМИЕ
Re: Сортировка списка указателей.
« Ответ #24 : 14 Июля 2014, 14:45:00 »
Да, переделка в стиле "незваный гость ЛУЧШЕ татарина"© :)
Вы держитесь здесь,  вам всего доброго, хорошего настроения, здоровья. ©

Оффлайн Film

  • Постоянный читатель
  • Пол: Мужской
Re: Сортировка списка указателей.
« Ответ #25 : 14 Июля 2014, 21:20:21 »
В НПИ (Новочеркасск) решили перейти с Borland C++ 3.0 на Dev C++, каково было удивление 70-летнего доцента, когда ни одна его программа из методички не скомпилировалась :)

Dev-C++ очень хорошая была IDE, жаль померла.....
Захожу сюда редко.

Оффлайн mksap

  • Авторитет
  • Пол: Мужской
Re: Сортировка списка указателей.
« Ответ #26 : 15 Июля 2014, 09:43:24 »
Грех смеяться над стариком! :)
А мне было не смешно, мне и достались эти переделки  ;D
Миша, а почему ты такой добрый и спокойный?
- Все просто! Я по воскресеньям в людей стреляю!

Оффлайн Film

  • Постоянный читатель
  • Пол: Мужской
Re: Сортировка списка указателей.
« Ответ #27 : 15 Июля 2014, 12:52:35 »
Разобрался я таки с adjacent_find, как всегда моя ошибка была в том, что я все усложнял. Теперь поиск дубликатов в списке указателей выполняется без циклов. Может кому пригодится:

#include <iostream>
#include <algorithm>
#include <list>

using namespace std;

int comp_ints(int *a, int *b)
{   
    return (*a == *b);
}


int main()
{
    list<int*> lst1;
   
    int a = 0;
    int b = 1;
    int c = 2;
    int d = 3;
    int e = 3; //<= ДУБЛИКАТ
    int f = 5;
    int g = 6;
    int h = 7;
    int i = 8;
   
    int *j = &a;
    int *k = &b;
    int *l = &c;
    int *m = &d;
    int *n = &e;
    int *o = &f;
    int *p = &g;
    int *q = &h;
    int *r = &i;
   
    lst1.push_back(j);
    lst1.push_back(k);
    lst1.push_back(l);
    lst1.push_back(m);
    lst1.push_back(n);
    lst1.push_back(o);
    lst1.push_back(p);
    lst1.push_back(q);
    lst1.push_back(r);
   
    list<int*>::iterator i2 = adjacent_find(lst1.begin(), lst1.end(), comp_ints);
    if (i2 == lst1.end())
    {
        cout << "Дубликатов нет. \n";
    }
    else
    {
        cout << "Да! Дубликаты есть!. \n"; 
    }
     
    return 0;
}


Если список не отсортирован, то его разумеется нужно отсортировать, потому как adjacent_find работает только с отсортированными списками/векторами.
« Последнее редактирование: 15 Июля 2014, 12:55:19 от Film »
Захожу сюда редко.