Форум программистов, компьютерный форум 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 log world программа должна считать всё отуда и вывести на экран. как это можно реализовать?
C++ Продолжение изучения C++ http://www.cyberforum.ru/cpp-beginners/thread626724.html
Здравствуйте! Я самостоятельно изучил основы C++ по следующим книгам: Шилдт, базовый курс; Лафоре, ООП в C++; Либерти, 21 день; Страуструп, С++. Читал по порядку. Теперь могу писать простые консольные программы для себя (на физические темы, учусь на физфаке). Есть желание начать проект, не слишком сложный, но чтобы использовать по возможности все полученные знания. У меня три просьбы: 1....
C++ Посоветуйте задачу Доброго времени суток, уважаемые участники форума. Занимаюсь программированием на C++ уже три года. Не могу сказать, что умею писать код хорошо. Очень далёк от того, что называют "Идеальный кодер". Решил я написать что-нибудь посерьёзнее, задач из задачника. Нет, я не хочу сказать, что справлюсь с любой задачей из задачника сходу. Но я достаточно долго занимался решением таких задач. Нужно... подробнее

Показать сообщение отдельно
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
21.07.2012, 20:52     Предикаты в STL
Цитата Сообщение от 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"));
}
 
Текущее время: 13:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru