我可以在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個元素。 –