来自n4385
:
§25.6.4 Transform:
template<class InputIterator, class OutputIterator, class UnaryOperation>
constexpr OutputIterator
transform(InputIterator first1, InputIterator last1, OutputIterator result, UnaryOperation op);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class UnaryOperation>
ForwardIterator2
transform(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 result, UnaryOperation op);
template<class InputIterator1, class InputIterator2, class OutputIterator, class BinaryOperation>
constexpr OutputIterator
transform(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, OutputIterator result, BinaryOperation binary_op);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator, class BinaryOperation>
ForwardIterator
transform(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator result, BinaryOperation binary_op);
§23.5.2.1.2 back_inserter
template<class Container>
constexpr back_insert_iterator<Container> back_inserter(Container& x)
返回:back_insert_iterator(x)。
§23.5.2.1 类模板 back_insert_iterator。
using iterator_category = output_iterator_tag;
所以std::back_inserter
不能与std::transform
的并行版本一起使用。支持输出迭代器的版本使用输入迭代器从源中读取。由于输入迭代器只能进行前置和后置自增(§23.3.5.2 输入迭代器),并且只有顺序(即非并行)执行,因此必须在它们之间保留顺序,并保留输出迭代器。
transform
版本来决定是否使用并行处理。对于大向量,transform
会失败。 - Croolmans
进行反向插入,这会使迭代器失效。 - Daniel Langrgodbolt
中将back_inserter
更改为插入到ordinals
时,它可以编译并且似乎可以工作。 - Croolmangodbolt
代码存在问题,即在std::back_inserter
中传递了s
而不是ordinals
。 - Croolman