Сигнатура функции — имя функции и список ее параметров
Итератор — это объект, который способен перебирать элементы контейнерного класса без необходимости пользователю знать реализацию определенного контейнерного класса
Forward declaration (предварительное объявление) — является таким типом объявления, при котором компилятор имеет возможность разрешить ссылки из различных частей программы. Предварительное объявление позволяет программисту ссылаться на объекты, о которых компилятор ещё не знает, но которые будут определены в процессе компиляции позже.
Почитать подробнее: Ускорение сборки C и C++ проектов, Pimp My Pimpl
Функиональный объект (функтор) — конструкция, позволяющая использовать объект как функцию. В C++ функтор для объявления функтора достаточно переопределить operator()
#include<iostream>classClamp{public:intoperator() (int Value,int Min,int Max) const {return Value < Min ? Min : Value < Max ? Value : Max; }};intmain(){ Clamp clamp; std::cout<<clamp(40,0,30) << std::endl; // 30 std::cout<<clamp(-1,0,30) << std::endl; // 0 std::cout<<clamp(15,0,30) << std::endl; // 15}
Предикат — подмножество функторов, в которых тип возвращаемого значения bool
#include<iostream>#include<algorithm>#include<vector>classEvenNumber{public:booloperator()(int Value) const {return Value %2==0; }};intmain(){const std::vector<int> Numbers{ 0,1,2,3,4,5,6,7,8 };constint Count = std::count_if(Numbers.begin(),Numbers.end(),EvenNumber()); std::cout << Count <<" even numbers "; std::cout <<"in vector of "<<Numbers.size() <<" elements"<< std::endl; // 5 even numbers in vector of 9 elements}
Анонимная функция lambda — это краткая форма записи анонимных функторов
#include<iostream>#include<algorithm>#include<vector>intmain(){const std::vector<int> Numbers{ 0,1,2,3,4,5,6,7,8 };constint Count = std::count_if(Numbers.begin(),Numbers.end(), [](int Value) { return Value %2==0; }); std::cout << Count <<" even numbers "; std::cout <<"in vector of "<<Numbers.size() <<" elements"<< std::endl; // 5 even numbers in vector of 9 elements}
#include<iostream>#include<algorithm>#include<vector>intmain(){const std::vector<int> Numbers{ 0,1,2,3,4,5,6,7,8 };constauto lambdaFunc = [](int Value) { return Value %2==0; };constint Count = std::count_if(Numbers.begin(),Numbers.end(), lambdaFunc); std::cout << Count <<" even numbers "; std::cout <<"in vector of "<<Numbers.size() <<" elements"<< std::endl; // 5 even numbers in vector of 9 elements}