A C++ template library for embedded applications
Designed and maintained by
Aster Consulting Ltd

Algorithms

A set of reverse engineered algorithms that are new to C++ 11.

minmax

template <typename T>
std::pair<const T&, const T&> minmax(const T& a, const T& b)

template <typename T, typename TCompare>
std::pair<const T&, const T&> minmax(const T& a, const T& b, TCompare compare)

minmax_element

template <typename TIterator>
std::pair<TIterator, TIterator> minmax_element(TIterator begin, TIterator end)

template <typename TIterator, typename TCompare>
std::pair<TIterator, TIterator> minmax_element(TIterator begin, TIterator end, TCompare compare)

is_sorted

template <typename TIterator>
bool is_sorted(TIterator begin, TIterator end)

template <typename TIterator, typename TCompare>
bool is_sorted(TIterator begin, TIterator end, TCompare compare)

is_sorted_until

template <typename TIterator>
TIterator is_sorted_until(TIterator begin, TIterator end)

template <typename TIterator, typename TCompare>
TIterator is_sorted_until(TIterator begin, TIterator end, TCompare compare)

copy

An ETL extension. Four parameter version that will stop copying when either iterator reaches the end of its range.

template <typename TInputIterator, typename TOutputIterator>
TOutputIterator copy(TInputIterator  i_begin, TInputIterator  i_end,
                     TOutputIterator o_begin, TOutputIterator o_end)

copy_n

template <typename TInputIterator, typename Size, typename TOutputIterator>
TOutputIterator copy_n(TInputIterator begin, Size count, TOutputIterator result)

An ETL extension. A version that will stop copying when either n items have been  copied or the output iterator reaches
the end of its range.

template <typename TIterator, typename TOutputIterator>
TOutputIterator copy_if(TIterator i_begin,
                        size_t n,
                        TOutputIterator o_begin, TOutputIterator o_end,
                        TUnaryPredicate predicate)

copy_if

template <typename TIterator, typename TOutputIterator, typename TUnaryPredicate>
TOutputIterator copy_if(TIterator begin, TIterator end, TOutputIterator out, TUnaryPredicate
predicate)

An ETL extension. A version that will stop copying when either iterator reaches the end of its range.
template <typename TIterator, typename TOutputIterator, typename TUnaryPredicate>
TOutputIterator copy_if(TIterator i_begin,        TIterator i_end,
                        TOutputIterator o_begin,  TOutputIterator o_end,
                        TUnaryPredicate predicate)

find_if_not

template <typename TIterator, typename TUnaryPredicate>
TIterator find_if_not(TIterator begin, TIterator end, TUnaryPredicate predicate)

all_of

template <typename TIterator, typename TUnaryPredicate >
bool all_of(TIterator begin, TIterator end, TUnaryPredicate predicate)

any_of

template <typename TIterator, typename TUnaryPredicate >
bool any_of(TIterator begin, TIterator end, TUnaryPredicate predicate)

none_of

template <typename TIterator, typename TUnaryPredicate >
bool none_of(TIterator begin, TIterator end, TUnaryPredicate predicate)

is_permutation

template <typename TIterator1,
          typename TIterator2>
bool is_permutation(TIterator1 begin1,
                    TIterator1 end1,
                    TIterator2 begin2)

template <typename TIterator1,
          typename TIterator2>
bool is_permutation(TIterator1 begin1,
                    TIterator1 end1,
                    TIterator2 begin2,
                    TIterator2 end2)

template <typename TIterator1,
          typename TIterator2,
          typename TBinaryPredicate>
bool is_permutation(TIterator1       begin1,
                    TIterator1       end1,
                    TIterator2       begin2,
                    TBinaryPredicate predicate)

template <typename TIterator1,
          typename TIterator2,
          typename TBinaryPredicate>
bool is_permutation(TIterator1       begin1,
                    TIterator1       end1,
                    TIterator2       begin2,
                    TIterator2       end2,
                    TBinaryPredicate predicate)

is_partitioned

template <typename TIterator,
          typename TUnaryPredicate>
bool is_partitioned(TIterator begin,
                    TIterator end,
                    TUnaryPredicate predicate)

partition_point

template <typename TIterator,
          typename TUnaryPredicate>
TIterator partition_point(TIterator begin,
                          TIterator end, 
                          TUnaryPredicate predicate)

partition_copy

template <typename TSource,
          typename TDestinationTrue,
          typename TDestinationFalse,
          typename TUnaryPredicate>
std::pair<TDestinationTrue, TDestinationFalse> partition_copy(TSource           begin,
                                                              TSource           end,
                                                              TDestinationTrue  destination_true,
                                                              TDestinationFalse destination_false,
                                                              TUnaryPredicate   predicate)

partition_transform

Transforms data from the source to one of two destinations.
If the predicate returns true then the source data if modified by function_true and stored in destination_true.
If the predicate returns false then the source data if modified by function_false and stored in destination_false.

One input range.
template <typename TSource,
          typename TDestinationTrue,
          typename TDestinationFalse,
          typename TUnaryFunctionTrue,
          typename TUnaryFunctionFalse,
          typename TUnaryPredicate>
std::pair<TDestinationTrue, TDestinationFalse>
  partition_transform(TSource             begin,
                      TSource             end,
                      TDestinationTrue    destination_true,
                      TDestinationFalse   destination_false,
                      TUnaryFunctionTrue  function_true,
                      TUnaryFunctionFalse function_false,
                      TUnaryPredicate     predicate)

Two input ranges.
template <typename TSource1,
          typename TSource2,
          typename TDestinationTrue,
          typename TDestinationFalse,
          typename TUnaryFunctionTrue,
          typename TUnaryFunctionFalse,
          typename TUnaryPredicate>
std::pair<TDestinationTrue, TDestinationFalse>
  partition_transform(TSource1             begin1,
                      TSource1             end1,
                      TSource2             begin2,
                      TDestinationTrue     destination_true,
                      TDestinationFalse    destination_false,
                      TBinaryFunctionTrue  function_true,
                      TBinaryFunctionFalse function_false,
                      TBinaryPredicate     predicate)

transform

An ETL extension. A version that will stop transforming when either iterator reaches the end of its range.

template <typename TIterator,
          typename TOutputIterator,
          typename TUnaryPredicate>
void transform(TIterator       i_begin,       
               TIterator       i_end,
               TOutputIterator o_begin, 
               TOutputIterator o_end,
               TUnaryFunction  function)

transform_n

One input range.
template <typename TInputIterator,
          typename TSize,
          typename TOutputIterator,
          typename TUnaryFunction>
void transform_n(TInputIterator  i_begin,
                 TSize           n,
                 TOutputIterator o_begin,
                 TUnaryFunction  function)

Two input ranges.
template <typename TInputIterator1,
          typename TInputIterator2,
          typename TSize,
          typename TOutputIterator,
          typename TBinaryFunction>
void transform_n(TInputIterator1 i_begin1,
                 TInputIterator2 i_begin2,
                 TSize           n,
                 TOutputIterator o_begin,
                 TBinaryFunction function)

transform_if

Transforms data from the source based on a predicate.
If the predicate returns true then the source data if modified by function and stored in the output range.
If the predicate returns false then the source data is ignored.

One input range.
template <typename TInputIterator,
          typename TOutputIterator,
          typename TUnaryFunction,
          typename TUnaryPredicate>
TOutputIterator transform_if(TInputIterator  i_begin, 
                             TInputIterator  i_end,
                             TOutputIterator o_begin,
                             TUnaryFunction  function,
                             TUnaryPredicate predicate)

Two input ranges.
template <typename TInputIterator1,
          typename TInputIterator2,
          typename TOutputIterator,
          typename TBinaryFunction,
          typename TBinaryPredicate>
TOutputIterator transform_if(TInputIterator1  i_begin1,
                             TInputIterator1  i_end1,
                             TInputIterator2  i_begin2,
                             TOutputIterator  o_begin,
                             TBinaryFunction  function,
                             TBinaryPredicate predicate)
External links courtesy of cppreference.com
algorithm.h