Сигнатура функции — имя функции и список ее параметров
Итератор — это объект, который способен перебирать элементы контейнерного класса без необходимости пользователю знать реализацию определенного контейнерного класса
Forward declaration (предварительное объявление) — является таким типом объявления, при котором компилятор имеет возможность разрешить ссылки из различных частей программы. Предварительное объявление позволяет программисту ссылаться на объекты, о которых компилятор ещё не знает, но которые будут определены в процессе компиляции позже.
Почитать подробнее: Ускорение сборки C и C++ проектов, Pimp My Pimpl
Функиональный объект (функтор) — конструкция, позволяющая использовать объект как функцию. В C++ функтор для объявления функтора достаточно переопределить operator()
#include <iostream>
class Clamp
{
public:
int operator() (int Value, int Min, int Max) const
{
return Value < Min ? Min : Value < Max ? Value : Max;
}
};
int main()
{
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>
class EvenNumber
{
public:
bool operator()(int Value) const
{
return Value % 2 == 0;
}
};
int main()
{
const std::vector<int> Numbers{ 0, 1, 2, 3, 4, 5, 6, 7, 8 };
const int 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>
int main()
{
const std::vector<int> Numbers{ 0, 1, 2, 3, 4, 5, 6, 7, 8 };
const int 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>
int main()
{
const std::vector<int> Numbers{ 0, 1, 2, 3, 4, 5, 6, 7, 8 };
const auto lambdaFunc = [](int Value) { return Value % 2 == 0; };
const int 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
}