Почему ForwardIterator2 вместо OutputIterator в std::transform?

Рейтинг: 0Ответов: 1Опубликовано: 15.02.2023

Почему std::transform с первым параметром ExecutionPolicy принимает в качестве итератора для второй последовательности ForwardIterator2, а не OutputIterator, как вариант без ExecutionPolicy?

template<class InputIterator, class OutputIterator,
         class UnaryOperation>
  constexpr OutputIterator
    transform(InputIterator first1, InputIterator last1,
              OutputIterator result, UnaryOperation op); // тут OutputIterator

template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2,
         class UnaryOperation>
  ForwardIterator2
    transform(ExecutionPolicy&& exec,
              ForwardIterator1 first1, ForwardIterator1 last1,
              ForwardIterator2 result, UnaryOperation op); // а тут ForwardIterator2

Ответы

▲ 0

Потому что непонятно, как распределять output iterator'ы между разными потоками. Представьте, что там std::ostream_iterator. ++ для него вообще ничего не делает.