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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работают функторы, сохраняют старое значение, функторовы сохраняют старое значение 
V
    Опции темы
ller
  Дата 12.6.2009, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.8.2008
Где: г. Таганрог

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



Код

template<class T> class MAX
{
    T maxt;
public:
    MAX():maxt(numeric_limits<T>::min()){}
    void operator ()(T x)
    {
        maxt = max(x,maxt);
    }
    T result()const{return maxt;}
};

template<class T> class SUM
{
    T res;
public:
    SUM(T i =0):res(i){}
    void operator()(T x){res+=x;}
    T result()const{return res;}
};

int main()
{
    vector<int> vi;
    MAX<int> *maxi=new MAX<int>;
    SUM<int> summ;
    //MAX<int> &tempm = *maxi;

 // заполнение vi ------
   
    for_each(vi.begin(),vi.end(),*maxi);
    for_each(vi.begin(),vi.end(),summ);
    cout << "\n--------------\n" << maxi->result() <<" сумма " << summ.result()<<endl; // prints[U][/U]
}



Вот простенькая програмка с использованием функторов. vi заполнен числами. В дебагере при работе for_each внутренние переменные класссов меняются как положенно, но при выводе пишут минимальный int и 0 соответственно.


Это сообщение отредактировал(а) ller - 12.6.2009, 12:34
PM MAIL   Вверх
azesmcar
Дата 12.6.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



ller

for_each функтор по значению принимает, все что он изменяет, изменяется в локальной копии, а ваша остается неизменной. Но есть и хорошая новость, она возвращает свою локальную копию.
Код

MAX<int> max = for_each(vi.begin(),vi.end(), MAX<int>());
cout << max.result() <<endl;


PM   Вверх
mes
Дата 12.6.2009, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



я понимаю, что приведенные в примере функторы, лишь экспериментальные, но на всякий случай скажу что есть :
std::max_element : http://www.cplusplus.com/reference/algorithm/max_element/
std::min_element : http://www.cplusplus.com/reference/algorithm/min_element/
std::accumulate   : http://www.cplusplus.com/reference/std/numeric/accumulate/
 smile 

Это сообщение отредактировал(а) mes - 12.6.2009, 15:50


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.8.2008
Где: г. Таганрог

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



azesmcar
Что то подобное я предполагал, поэтому создал указатель и инициализировал его...

Спасибо за ответ smile

Добавлено @ 15:42
mes
Про max и min элемет спасибо, не встретил их в книге, accumulate знал. Я просто учусь и пробую smile

Это сообщение отредактировал(а) ller - 12.6.2009, 15:44
PM MAIL   Вверх
ller
Дата 15.6.2009, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.8.2008
Где: г. Таганрог

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



все
PM MAIL   Вверх
andrew_121
Дата 15.6.2009, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



)) Три дня думал...


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
ller
Дата 15.6.2009, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.8.2008
Где: г. Таганрог

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



Так не знал, что метить надо ))))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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