[numeric.iota]

llvm-svn: 104719
This commit is contained in:
Howard Hinnant 2010-05-26 18:53:44 +00:00
parent 52c2738324
commit 40c7ef90b2
2 changed files with 50 additions and 0 deletions

View File

@ -50,6 +50,9 @@ template <class InputIterator, class OutputIterator, class BinaryOperation>
OutputIterator
adjacent_difference(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op);
template <class ForwardIterator, class T>
void iota(ForwardIterator first, ForwardIterator last, T value);
} // std
*/
@ -178,6 +181,15 @@ adjacent_difference(_InputIterator __first, _InputIterator __last, _OutputIterat
return __result;
}
template <class _ForwardIterator, class _Tp>
inline _LIBCPP_INLINE_VISIBILITY
void
iota(_ForwardIterator __first, _ForwardIterator __last, _Tp __value)
{
for (; __first != __last; ++__first, ++__value)
*__first = __value;
}
_LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP_NUMERIC

View File

@ -0,0 +1,38 @@
//===----------------------------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <numeric>
// template <class ForwardIterator, class T>
// void iota(ForwardIterator first, ForwardIterator last, T value);
#include <numeric>
#include <cassert>
#include "../iterators.h"
template <class InIter>
void
test()
{
int ia[] = {1, 2, 3, 4, 5};
int ir[] = {5, 6, 7, 8, 9};
const unsigned s = sizeof(ia) / sizeof(ia[0]);
std::iota(InIter(ia), InIter(ia+s), 5);
for (unsigned i = 0; i < s; ++i)
assert(ia[i] == ir[i]);
}
int main()
{
test<forward_iterator<int*> >();
test<bidirectional_iterator<int*> >();
test<random_access_iterator<int*> >();
test<int*>();
}