11 / 11 / 2
Регистрация: 04.03.2012
Сообщений: 128
1

функторы && STL

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

Author24 — интернет-сервис помощи студентам
Знакомлюсь с функторами. Помогите реализовать поиск минимального числа в последовательности,
средн.арифмет. в посл-ти и количество положительных чисел. Нужно использовать цикл 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
20.11.2012, 21:54
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.11.2012, 21:54
Ответы с готовыми решениями:

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

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration?
Пытаюсь скомпилировать программу пишет 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&
В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура...

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

Добавлено через 1 час 22 минуты
не понятен смысл всего этого
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1257 / 1006 / 74
Регистрация: 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
11 / 11 / 2
Регистрация: 04.03.2012
Сообщений: 128
21.11.2012, 19:17  [ТС] 5
Ага) Благодарю!

Добавлено через 19 часов 8 минут
кстати а можно эим способом(перегрузка () и for_each) проверить на равенство 1ый и последний эл-ты в последовательности?
0
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
21.11.2012, 19:27 6
Sawyer1988, и какой смысл использовать цикл, чтобы сравнить 2 элемента?
0
11 / 11 / 2
Регистрация: 04.03.2012
Сообщений: 128
21.11.2012, 23:19  [ТС] 7
по заданию так нада(возможно там ошибка,как во многих других ), я понимаю что это бред)
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
21.11.2012, 23:21 8
Ну создайте цикл с одной итерацией, в чем проблема?
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
21.11.2012, 23:27 9
что-то никто не вспомнил то, что функторы должны быть без состояния. возможно есть алгоритмы, для которых это правило можно нарушать, возможно это даже как раз for_each. все равно функтор с состоянием выглядит подозрительно.
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.11.2012, 23:29 10
Цитата Сообщение от Sawyer1988 Посмотреть сообщение
кстати а можно эим способом(перегрузка () и for_each) проверить на равенство 1ый и последний эл-ты в последовательности?
ЕМНИП, по стандарту нельзя, так как стандарт не гарантирует того, что for_each будет обходить элементы последовательно. Следовательно, функтор, запоминающий первый и последний элемент последовательности, не прокатит. Мне почему-то кажется, что задание подразумевает именно такое решение :)
1
21.11.2012, 23:29
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.11.2012, 23:29
Помогаю со студенческими работами здесь

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

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

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

Friend ostream& operator<<(ostream& stream, CArr& obj);
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
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...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Linux API: Полное руководство
hw_wired 08.02.2025
Linux API – это низкоуровневый программный интерфейс, обеспечивающий взаимодействие пользовательских приложений с ядром операционной системы. Он включает набор системных вызовов, библиотечных функций. . .
Асинхронное программировани­­­­­е и эмуляция async/await в C (СИ)
hw_wired 08.02.2025
Язык программирования C, несмотря на свой возраст, предоставляет неплохие средства для реализации асинхронных операций, позволяя создавать эффективные решения для обработки параллельных задач. В. . .
Как сгенерировать случайное число в указанном диапазоне в JavaScript
bytestream 08.02.2025
В JavaScript генерация случайных чисел основана на детерминированном алгоритме, который создает последовательность псевдослучайных значений. Встроенный метод Math. random() возвращает псевдослучайное. . .
Как получить список всех таблиц в PostgreSQL
bytestream 08.02.2025
PostgreSQL предлагает несколько методов для получения списка таблиц в базе данных. Наиболее распространенный способ - использование системного каталога pg_tables, который содержит информацию обо всех. . .
Java Spring для начинающих
bytestream 08.02.2025
Spring Framework - это универсальное решение для создания корпоративных Java-приложений. Он предоставляет комплексную программную и конфигурационную модель для современных приложений на Java. Spring. . .
Асинхронное программировани­­­­­­е и async/await в Visual Basic
bytestream 08.02.2025
В основе асинхронного программирования в Visual Basic лежит концепция неблокирующего выполнения операций. Когда программа встречает длительную операцию, например, чтение большого файла или запрос к. . .
Async/await и асинхронное программировани­­е в Delphi
bytestream 08.02.2025
Асинхронное программирование является неотъемлемой частью разработки современных приложений, позволяя создавать отзывчивые и эффективные программы. В Delphi реализация асинхронности опирается на. . .
Асинхронное программировани­­­­­е и async/await в C#
bytestream 08.02.2025
Асинхронное программирование - концепция, позволяющая приложениям эффективно выполнять длительные операции без блокировки основного потока выполнения. В контексте современной разработки на C# это. . .
Асинхронное программировани­­­­­е и горутины/каналы в Go
bytestream 08.02.2025
Язык Go изначально разрабатывался с учетом современных многоядерных процессоров и необходимости эффективного параллельного выполнения задач. В отличие от традиционных подходов к асинхронному. . .
Как восстановить stash в Git
hw_wired 08.02.2025
Git stash - это средство для временного сохранения изменений в рабочей директории. В процессе разработки часто возникают ситуации, когда нужно быстро переключиться на другую задачу, но текущие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru