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

Функторы и алгоритмы stl - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ функции пользовательские http://www.cyberforum.ru/cpp-beginners/thread205084.html
Помогите решить задачи в С++ (я в этом начиющий): 1)Вывести на экран таблицу степеней двойки: 2, где n изменяется от -к до 10. Операцию возведения целого числа в целую степень оформить в виде функции.(Пользователькие функции) 2)Из положительных значений двух целочисленных массивов различной размерности сформировать общий массив. Найти среднее арифметическое элементов, расположенных в массиве до...
C++ Массив работает но криво ( 1 . В одномерном массиве, состоящем из и целых элементов, вычислить: 1) К максимальных элементов массива; 2) Проверить массив на упорядоченность; Преобразовать массив таким образом, чтобы в первой его половине располага¬лись элементы, стоявшие в нечетных позициях, а во второй половине — элемен¬ты, стоявшие в четных позициях. Составить программу, которая из введенной последовательности N... http://www.cyberforum.ru/cpp-beginners/thread205083.html
C++ пользавательские функции
Помогите решить задачи в С++ (я в этом начиющий): 1)Вывести на экран таблицу степеней двойки: 2, где n изменяется от -к до 10. Операцию возведения целого числа в целую степень оформить в виде функции.(Пользователькие функции) 2)Из положительных значений двух целочисленных массивов различной размерности сформировать общий массив. Найти среднее арифметическое элементов, расположенных в массиве до...
C++ Работа со строками [String.h]
Написать програму при помощи библиотеки String.h Дана строка S1.....Sn (n за ранее не известно) нужно: 1)определить количество пробелов среди S1....Sn. 2)Выяснить входит ли в последовательность буква ю. 3)Имеются ли в строке буквы входящие в слово " Шина ". 4)выяснить имеються ли в строке пара соседствующих букв но или он. И это всё вывести на экран.. Добавлено через 19 часов 12 минут...
C++ пользовательские функции http://www.cyberforum.ru/cpp-beginners/thread205079.html
Помогите решить задачи в С++ (я в этом начиющий): 1)Вывести на экран таблицу степеней двойки: 2, где n изменяется от -к до 10. Операцию возведения целого числа в целую степень оформить в виде функции.(Пользователькие функции) 2)Из положительных значений двух целочисленных массивов различной размерности сформировать общий массив. Найти среднее арифметическое элементов, расположенных в массиве до...
C++ Переписать пять первых положительных элементов массива подряд в массив У Люди добрые, помогите решить пару задач на С++ на одномерные и двумерные массивы (я новичок и мало что в этом соображаю): 1)Дан массив Х. Переписать пять первых положительных элементов массива подряд в массив У. Найти максимальный элемент массива Х. 2)Найти наибольший и наименьший элементы вещественного массива. Если таких элементов несколько, определить, сколько их. Создать фйнкции для... подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
3021 / 1677 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
07.12.2010, 06:15     Функторы и алгоритмы stl
Ну, во-первых вы неправильно вычисляете максимум. Инициализируете нулем, а потом сравниваете со значениями вектора. Если все значения вектора будут меньше нуля, то выведется ноль, а не искомый максимум:
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
#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
#include <time.h>
 
using namespace std;
 
class cl: public unary_function<int,void>
{
    int i,max_value;
public:
        cl()
        {
                max_value=0;
                i=0;
 
        }
        ~cl(){}
        void operator()(int value)
        {
                i++;                 // Подсчитывается номер обрабатываемого элемента вектора
                if(value>max_value)
                        max_value=value;
                if(i==10)            // Проверка на достижение последнего элемента
                        cout << "Max value: "
                             << max_value
                             << std::endl;
        }
};
 
int main()
{       
        vector<int> vec;
        srand(time(NULL));
        for(int j=0; j<10; j++)
                vec.push_back(rand()%101 - 1000);
        for(int j=0; j<10; j++)
                cout<<vec[j]<<" ";
        cout<<endl;
        for_each(vec.begin(),vec.end(),cl());
        return 0;
}
А во-вторых алгоритмом 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
51
52
//////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <functional>
#include <iostream>
#include <time.h>
#include <vector>
////////////////////////////////////////////////////////////////////////////////////// 
using namespace std;
//////////////////////////////////////////////////////////////////////////////////////
struct  T_get_max_elem
{
    int   value_max_;
    bool  is_first_iter_;
    //-------------------------------------------------------------------------------- 
    T_get_max_elem() : value_max_(), is_first_iter_(true)
    {}
    //-------------------------------------------------------------------------------- 
    void operator()(int  value_cur)
    {
        if(   is_first_iter_
           || value_cur > value_max_)
        {
            is_first_iter_  = false;
            value_max_      = value_cur;
        }   
    }
    //--------------------------------------------------------------------------------
    operator int()
    {
        return  value_max_;
    }
};
 
int main()
{       
    vector<int> vec;
    srand(time(NULL));
    for(int j = 0; j < 10; ++j)
    {
        vec.push_back(rand() % 101 - 90);
    }
            
    for(size_t  j = 0; j < vec.size(); ++j)
    {
        cout << vec[j] 
             << " ";
    }            
    cout<<endl;
    cout << "Max value: "
         << for_each(vec.begin(),vec.end(),T_get_max_elem())
         << std::endl;    
}
 
Текущее время: 05:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru