is_heap, is_heap_until
template<class RandomAccessIterator, class Predicate> bool is_heap(RandomAccessIterator first, RandomAccessIterator last, Predicate pred);
predが示す大小関係に基づき、シーケンス[first,last)がヒープ化されていればtrueを返します。predが省略されていた場合、operator<が適用されます。
template<class RandomAccessIterator, class Predicate> RandomAccessIterator is_heap_until(RandomAccessIterator first, RandomAccessIterator last, Predicate pred);
is_heap(first,mid,pred)がtrueとなる最大のmidを返します。predが省略されていた場合、operator<が適用されます。
……つづき // is_heap make_heap(c.begin(), c.end()); result = is_heap(c.begin(), c.end()); assert( result ); pop_heap(c.begin(), c.end()); result = is_heap(c.begin(), c.end()); assert( !result ); // is_heap_until iter = is_heap_until(c.begin(), c.end()); assert( distance(c.begin(), iter) == 4 ); ……つづく
iota
template<class ForwardIterator, class T> void iota(ForwardIterator first, ForwardIterator last, T value);
これだけ<numeric>に定義されています。シーケンス[first,last)に対し、
*first = value; ++first; ++value;
を繰り返します。たとえばint data[5]に対しiota(data, data+5, 0)するとdata[]に{ 0, 1, 2, 3, 4 }がセットされます。
……つづき // iota iota(c.begin(), c.end(), 1); assert ( accumulate(c.begin(), c.end(), 0) == 15 ); } ……おしまい。