Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неправильно работает max_element() 
V
    Опции темы
Flashdown
Дата 16.5.2008, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 27.5.2006
Где: Москва

Репутация: нет
Всего: нет



Создаю 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);
 

в чем может быть причина?
PM MAIL ICQ   Вверх
bsa
Дата 16.5.2008, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Попробовал следующий код:
Код
#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.

PM   Вверх
Flashdown
Дата 16.5.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 27.5.2006
Где: Москва

Репутация: нет
Всего: нет



ну с int'ом всё нормально... а не получается когда в массиве не числа, а объекты(
PM MAIL ICQ   Вверх
bsa
Дата 16.5.2008, 23:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



значит алгоритм сравyения реализован неверно!
Цитата
Requirements on types

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

PM   Вверх
mes
Дата 17.5.2008, 00:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



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

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

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


Это сообщение отредактировал(а) mes - 17.5.2008, 00:16


--------------------
PM MAIL WWW   Вверх
Flashdown
Дата 17.5.2008, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 27.5.2006
Где: Москва

Репутация: нет
Всего: нет



Там просто достаточно большой класс, и я думаю ни у кого не возникнет желания изучать достаточно большой код.. 
Насчет сравнения - если проверять именно операцию < с различными объектами этого класса - то она работает правильно, т.е. результат получается именно тот который нужен
PM MAIL ICQ   Вверх
Flashdown
Дата 17.5.2008, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 27.5.2006
Где: Москва

Репутация: нет
Всего: нет



там проблема в опечатке была smile всем спасибо
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.