Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Неправильно работает max_element()


Автор: Flashdown 16.5.2008, 21:43
Создаю std::vector из объектов определенного класса, и необходимо найти максимальный элемент.
Хочу использовать стандартную функцию max_element из библиотеки algorithm, но она почему то всегда возвращает не максимальный а последний элемент массива.
Операцию < в классе переопределил, и работает она правильно.

вот упрощенный код:
Код

vector<myclass> container;
vector<myclass>::iterator begin, end, it;
Input inp;
while (ifs.peek()!=EOF) {
    ifs >> inp;
    container.push_back(inp);
}
begin = container.begin();
end = container.end();
for (it=begin; it!=end; it++) {
    cout << *it; //выводятся все значения правильно
}
cout << "\n\nMax element: " << *max_element(begin, end);
 

в чем может быть причина?

Автор: bsa 16.5.2008, 21:54
Попробовал следующий код:
Код
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
        vector<int> container;
        vector<int>::iterator begin, end, it;
        int inp;
        while (cin.good()) {
            cin >> inp;
            container.push_back(inp);
        }
        begin = container.begin();
        end = container.end();
        for (it=begin; it!=end; it++) {
            cout << *it << ", "; //выводятся все значения правильно
        }
        cout << "\n\nMax element: " << *max_element(begin, end);
}
Ввел следующие данные:
Код
1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 0
Получил следующий результат:
Код
1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 

Max element: 9
Что соответствует действительности.
Код
$ gcc --version
gcc (GCC) 4.1.2 (Gentoo 4.1.2 p1.0.2)
Copyright (C) 2006 Free Software Foundation, Inc.

Автор: Flashdown 16.5.2008, 22:16
ну с int'ом всё нормально... а не получается когда в массиве не числа, а объекты(

Автор: bsa 16.5.2008, 23:22
значит алгоритм сравyения реализован неверно!
Цитата
Requirements on types

ForwardIterator is a model of Forward Iterator. 
ForwardIterator's value type is LessThan Comparable.

Автор: mes 17.5.2008, 00:13
Цитата(Flashdown @  16.5.2008,  22:16 Найти цитируемый пост)
ну с int'ом всё нормально... а не получается когда в массиве не числа, а объекты( 

Цитата(bsa @  16.5.2008,  23:22 Найти цитируемый пост)
значит алгоритм сравyения реализован неверно!

да другого ничего не остается..нельзя ли показать myclass? а именно операцию сравнения ..

Автор: Flashdown 17.5.2008, 13:50
Там просто достаточно большой класс, и я думаю ни у кого не возникнет желания изучать достаточно большой код.. 
Насчет сравнения - если проверять именно операцию < с различными объектами этого класса - то она работает правильно, т.е. результат получается именно тот который нужен

Автор: Flashdown 17.5.2008, 14:37
там проблема в опечатке была smile всем спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)