我可以在C++标准的草案N4431中找不到transform_n函数。为什么C++标准库中没有std :: transform_n函数?
这是故意的吗?如果不是的话,那么人们会如何为未来版本的标准提出建议?
这是我将如何实现它:
template<typename _InputIterator, typename Size, typename _OutputIterator, typename _UnaryOperation>
_OutputIterator transform_n(_InputIterator __first, Size __n, _OutputIterator __result, _UnaryOperation __op) {
for(Size i=0;i<__n;++i)
*__result++ = __op(*__first++);
return __result;
}
template<typename _InputIterator1, typename Size, typename _InputIterator2, typename _OutputIterator, typename _BinaryOperation>
_OutputIterator transform_n(_InputIterator1 __first1, Size __n, _InputIterator2 __first2, _OutputIterator __result, _BinaryOperation __binary_op) {
for(Size i=0;i<__n;++i)
*__result++ = __binary_op(*__first1++, *__first2++);
return __result;
}
请参阅https://isocpp.org/std/submit-a-proposal。一定要拿出一些引人注目的用例。 – chris
@TonyD:这不仅仅是因为你不能通过两次相同的输入迭代器,所以它可以节省你的时间。但是你可以使用带有lambda的'std :: generate_n'。 – rici
我会更感兴趣的是在迭代器(或范围)本身编码,而不是每个算法都有一个'_n'版本。例如,Eric Niebler的[范围库](https://github.com/ericniebler/range-v3),它具有'take(N)'适配器,它采用范围的前N个元素。 –