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

Предикаты в STL - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти количество элементов массива, больших заданного числа http://www.cyberforum.ru/cpp-beginners/thread626779.html
помогите пожалуйста Найти количество элементов массива, больших заданного числа
C++ base64 дай пожалуйста рабочий код кодировщика и декодировщика askii < - > base64 http://www.cyberforum.ru/cpp-beginners/thread626751.html
Упорядочьте элементы массива по убыванию модулей элементов C++
Помогите решать лабораторную работу Упорядочьте элементы массива по убыванию модулей элементов.
Вывод данных из тектового файла C++
Здравствуйте уважаемые эксперты c++. не могли бы мне помочь. на реализации одно из кода. мне понадобилась возможность вывода из файла txt всех данных в программа. те в файле txt написано hello 1...
C++ Продолжение изучения C++ http://www.cyberforum.ru/cpp-beginners/thread626724.html
Здравствуйте! Я самостоятельно изучил основы C++ по следующим книгам: Шилдт, базовый курс; Лафоре, ООП в C++; Либерти, 21 день; Страуструп, С++. Читал по порядку. Теперь могу писать простые...
C++ Посоветуйте задачу Доброго времени суток, уважаемые участники форума. Занимаюсь программированием на C++ уже три года. Не могу сказать, что умею писать код хорошо. Очень далёк от того, что называют "Идеальный кодер".... подробнее

Показать сообщение отдельно
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
21.07.2012, 20:52
Цитата Сообщение от Ataman Посмотреть сообщение
Здравствуйте, не могу понять что должна принимать функция в качестве унарного предиката или бинарного.
UnPred pr - это функция(или функтор - объект класса умеющий притворяться функцией благодаря перегрузке оператора ()), которая проверяет переданный ей элемент списка на соответствие некоторому условию. Если это условие истинно, то элемент из списка будет удалён. Функторы являются более гибкими(а иногда и более эффективными(но это спорный вопрос )), чем функции поэтому предпочтение чаще всего отдаётся именно им.
Цитата Сообщение от Ataman Посмотреть сообщение
Вот допустим контейнер LIST, можете привести маленький пример пожалуйста?
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 <iostream>
#include <functional>
#include <iterator>
#include <string>
#include <list>
 
// функтор проверяющий наличие подстроки в строке
class contains : public std::unary_function<std::string, bool>
{
    private:
        std::string substr_;
    
    public:
        contains(const std::string& substr)
            : substr_(substr)
        {
            
        }
 
        // благодоря перегрузке этого оператора объект класса может "прикидываться" функцией
        bool operator () (const std::string& s) const
        {
            return s.find(substr_) != std::string::npos;
        }
};
 
int main()
{
    typedef std::ostream_iterator<std::string> string_ostream_iter_t;
    typedef std::list<std::string> string_list_t;
    //-----------------------
 
    string_list_t lst;
 
    // заполняем список
    lst.push_back("one");
    lst.push_back("two");
    lst.push_back("three");
    lst.push_back("four");
    lst.push_back("five");
 
    // удаляем строки содержащие букву "о"  
    lst.remove_if(contains("o"));
    
    // а так можно удалить строки НЕ содержащие букву "o"
    // в частности для того чтобы это работало contains и был унаследован от std::unary_function
    // lst.remove_if(std::not1(contains("o")));
    
    // выводим оставшиеся элементы списка на экран
    std::copy(lst.begin(), lst.end(), 
              string_ostream_iter_t(std::cout, "\n"));
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru