Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sawyer1988
10 / 10 / 0
Регистрация: 04.03.2012
Сообщений: 128
#1

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

20.11.2012, 21:54. Просмотров 735. Ответов 9
Метки нет (Все метки)

Знакомлюсь с функторами. Помогите реализовать поиск минимального числа в последовательности,
средн.арифмет. в посл-ти и количество положительных чисел. Нужно использовать цикл 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 минут
никто не в курсе?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2012, 21:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос функторы && STL (C++):

Ошибка: multiple definition of `void std::swap<A>(A&amp;, A&amp;) - C++
Хочу специализировать swap для своего класса. Получаю ошибку. Вот код:#ifndef A_H #define A_H #include &lt;string&gt; class A { ...

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration? - C++
Пытаюсь скомпилировать программу пишет friend ostrem&amp; operator &lt;&lt;(ostream&amp; outs, const Rational&amp;); - invalid function declaration. ...

В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура x*x+y*y<25&&x*x+y*y>=9& - C++
В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура...

ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка? - C++
void Array::getArray() // вывод массива { for (int ix = 0; ix &lt; size; ix++) cout &lt;&lt; setw(5) &lt;&lt; ptr; // вывод элементов...

Порядок вычисления: операторы «|» и «||», «&» и «&&» - C++
В Java булевые операторы «|» и «||», и «&amp;» и «&amp;&amp;» отличаются друг от друга порядком вычеслений, а в C++ так же как и в Java или...

STL & classes - C++
Товарищи, выручайте. Ситуация следующая. Имеется два *.h файла, в каждом файле отдельный класс, которые взаимодействуют друг с другом....

9
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.11.2012, 22:06 #2
Конкретнее, в чем состоит вопрос?
Я вижу три ошибки:
1) нету закрывающей фигурной скобки у перегруженного оператора ()
2) main обязан возвращать int
3) ужасное форматирование
0
Sawyer1988
10 / 10 / 0
Регистрация: 04.03.2012
Сообщений: 128
20.11.2012, 23:32  [ТС] #3
main ничего возвращать не нада.Скобку потерял) В проге нужно с помощью функтора собрать статистику о последовательности, а именно поиск минимального числа в последовательности,
средн.арифмет. в посл-ти и количество положительных чисел. То что я смог сделать выложил, заминка с остальным

Добавлено через 1 час 22 минуты
не понятен смысл всего этого
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
21.11.2012, 00:05 #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";
}
1
Sawyer1988
10 / 10 / 0
Регистрация: 04.03.2012
Сообщений: 128
21.11.2012, 19:17  [ТС] #5
Ага) Благодарю!

Добавлено через 19 часов 8 минут
кстати а можно эим способом(перегрузка () и for_each) проверить на равенство 1ый и последний эл-ты в последовательности?
0
I.M.
566 / 549 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
21.11.2012, 19:27 #6
Sawyer1988, и какой смысл использовать цикл, чтобы сравнить 2 элемента?
0
Sawyer1988
10 / 10 / 0
Регистрация: 04.03.2012
Сообщений: 128
21.11.2012, 23:19  [ТС] #7
по заданию так нада(возможно там ошибка,как во многих других ), я понимаю что это бред)
0
MrGluck
Модератор
Эксперт CЭксперт С++
7510 / 4642 / 700
Регистрация: 29.11.2010
Сообщений: 12,677
21.11.2012, 23:21 #8
Ну создайте цикл с одной итерацией, в чем проблема?
0
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
21.11.2012, 23:27 #9
что-то никто не вспомнил то, что функторы должны быть без состояния. возможно есть алгоритмы, для которых это правило можно нарушать, возможно это даже как раз for_each. все равно функтор с состоянием выглядит подозрительно.
0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.11.2012, 23:29 #10
Цитата Сообщение от Sawyer1988 Посмотреть сообщение
кстати а можно эим способом(перегрузка () и for_each) проверить на равенство 1ый и последний эл-ты в последовательности?
ЕМНИП, по стандарту нельзя, так как стандарт не гарантирует того, что for_each будет обходить элементы последовательно. Следовательно, функтор, запоминающий первый и последний элемент последовательности, не прокатит. Мне почему-то кажется, что задание подразумевает именно такое решение :)
1
21.11.2012, 23:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2012, 23:29
Привет! Вот еще темы с ответами:

Friend ostream& operator<<(ostream& stream, CArr& obj); - C++
CArr.h #pragma once class CArr{ int* arr = nullptr; int size = 10; void swap(int *a, int *b); void swap(int &amp;a, int &amp;b); ...

Abstract class & STL - C++
list&lt;CGraphicsObject*&gt; objS; objS.push_back(new Circle(&quot;Circle&quot; , 1)); objS.push_back(new Square(&quot;Square&quot; , 2)); objS.push_back(new...

Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) - C++
Добрый день. Как осуществляется выделения памяти под перегруженный оператор ввода данных в пользовательский тип? Ведь мы заранее не можем...

STL, функторы - C++
Всем привет! Вообщем есть код: #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;vector&gt; int main() { std::vector&lt;int&gt;...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.