Форум программистов, компьютерный форум CyberForum.ru

функторы && STL - C++

Восстановить пароль Регистрация
 
Sawyer1988
10 / 10 / 0
Регистрация: 04.03.2012
Сообщений: 128
20.11.2012, 21:54     функторы && STL #1
Знакомлюсь с функторами. Помогите реализовать поиск минимального числа в последовательности,
средн.арифмет. в посл-ти и количество положительных чисел. Нужно использовать цикл for_each
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <conio.h>
#include <ctime>
#include <algorithm>
#include <vector>
 
using namespace std;
 
class my{
public:
    int _i;
    int _j;
    double sr;
    int sum;
 
    my()
    {
    _i=0;
    _j=0;
    sr=0;
    
     }
 
    void operator()(int x)
    {
        if ( x % 2==0 )
        _i+=x;
        
        if ( x % 2!=0 )
            _j+=x;
    
};
 
 
void main()
{
setlocale(LC_ALL,"rus");
 
my ob;
 
int arr[] = {0, 1, 2, 3, 4, 5,8};
 
ob =for_each(arr,arr+sizeof(arr)/sizeof(arr[0]),
             ob);
 
cout <<"сумма чётных эл-тов: "<< ob._i << endl<<endl;
cout<<"сумма нечётных эл-тов: "<<ob._j<<endl<<endl;
 
    getch();
}
Добавлено через 1 час 0 минут
никто не в курсе?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.11.2012, 22:06     функторы && STL #2
Конкретнее, в чем состоит вопрос?
Я вижу три ошибки:
1) нету закрывающей фигурной скобки у перегруженного оператора ()
2) main обязан возвращать int
3) ужасное форматирование
Sawyer1988
10 / 10 / 0
Регистрация: 04.03.2012
Сообщений: 128
20.11.2012, 23:32  [ТС]     функторы && STL #3
main ничего возвращать не нада.Скобку потерял) В проге нужно с помощью функтора собрать статистику о последовательности, а именно поиск минимального числа в последовательности,
средн.арифмет. в посл-ти и количество положительных чисел. То что я смог сделать выложил, заминка с остальным

Добавлено через 1 час 22 минуты
не понятен смысл всего этого
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
21.11.2012, 00:05     функторы && STL #4
Ну, вы ж почти у цели были.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <vector>
#include <algorithm>
#include <limits>
 
class Statistics {
    int  minimum;
    long sum;
    int  positive_count;
    int  count;
    
public:
    Statistics()
      : minimum(std::numeric_limits<int>::max()),
        sum(0),
        positive_count(0),
        count(0)
    {}
 
/* Этими функциями будем забирать собранную статистику: */
    int getMinimum() const
    {
        return minimum;
    }
    
    int getPositiveCount() const
    {
        return positive_count;
    }
    
    double getAverage() const
    {
        return static_cast<double>(sum) / count;
    }
 
/* А вот эта будет учитывать новый элемент */
    void operator()(int next)
    {
        if (next < minimum) {
            minimum = next;
        }
        sum += next;
        if (next > 0) {
            ++positive_count;
        }
        ++count;
    }
};
 
int main()
{
    std::vector<int> vec = { 1, -2, 3, -4, -5, 6, 7, 8 };
    
    Statistics stat;
    stat = std::for_each(vec.begin(), vec.end(), stat);
    // for_each перебирает весь вектор и для каждого элемента
    // дёргает stat.operator(), передавая ей аргументом этот элемент
    // а потом возвращает собранную статистику
    
    std::cout << "Minimum: " << stat.getMinimum() << "\n"
              << "Average: " << stat.getAverage() << "\n"
              << "Positive count: " << stat.getPositiveCount() << "\n";
}
Sawyer1988
10 / 10 / 0
Регистрация: 04.03.2012
Сообщений: 128
21.11.2012, 19:17  [ТС]     функторы && STL #5
Ага) Благодарю!

Добавлено через 19 часов 8 минут
кстати а можно эим способом(перегрузка () и for_each) проверить на равенство 1ый и последний эл-ты в последовательности?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
21.11.2012, 19:27     функторы && STL #6
Sawyer1988, и какой смысл использовать цикл, чтобы сравнить 2 элемента?
Sawyer1988
10 / 10 / 0
Регистрация: 04.03.2012
Сообщений: 128
21.11.2012, 23:19  [ТС]     функторы && STL #7
по заданию так нада(возможно там ошибка,как во многих других ), я понимаю что это бред)
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
21.11.2012, 23:21     функторы && STL #8
Ну создайте цикл с одной итерацией, в чем проблема?
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
21.11.2012, 23:27     функторы && STL #9
что-то никто не вспомнил то, что функторы должны быть без состояния. возможно есть алгоритмы, для которых это правило можно нарушать, возможно это даже как раз for_each. все равно функтор с состоянием выглядит подозрительно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2012, 23:29     функторы && STL
Еще ссылки по теме:

STL функторы, предикаты C++
Как проверить, принадлежит ли символ заданному диапазону m...n, кроме if (c <= n && c >= m) ? C++
Почему в выражении нельзя использовать запятую вместо && C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.11.2012, 23:29     функторы && STL #10
Цитата Сообщение от Sawyer1988 Посмотреть сообщение
кстати а можно эим способом(перегрузка () и for_each) проверить на равенство 1ый и последний эл-ты в последовательности?
ЕМНИП, по стандарту нельзя, так как стандарт не гарантирует того, что for_each будет обходить элементы последовательно. Следовательно, функтор, запоминающий первый и последний элемент последовательности, не прокатит. Мне почему-то кажется, что задание подразумевает именно такое решение :)
Yandex
Объявления
21.11.2012, 23:29     функторы && STL
Ответ Создать тему
Опции темы

Текущее время: 08:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru