GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::ranges::views::counted(3) C++ Standard Libary std::ranges::views::counted(3)

std::ranges::views::counted - std::ranges::views::counted


Defined in header <ranges>
inline constexpr /*unspecified*/ counted = /*unspecified*/; (since C++20)
Call signature
template< class Iterator, class DifferenceType >


requires /* see below */ (since C++20)


constexpr /*span-or-subrange*/ counted( Iterator&& it,
DifferenceType&& count );


A counted view presents a view of the elements of the counted range [i, n) for some
iterator i and non-negative integer n.


A counted range [i, n) is the n elements starting with the element pointed to by i
and up to but not including the element, if any, pointed to by the result of n
applications of ++i.


If n == 0, the counted range is valid and empty. Otherwise, the counted range is
only valid if n is positive, i is dereferenceable, and [++i, --n) is a valid counted
range.


Formally, if it and count are expressions, T is std::decay_t<decltype((it))>, and D
is std::iter_difference_t<T>, then


if T models input_or_output_iterator and decltype((count)) models
std::convertible_to<D>,


* if T models contiguous_iterator, then views::counted(it, count) is
expression-equivalent to std::span(std::to_address(it),
static_cast<std::size_t>(static_cast<D>(count))),
* otherwise, if T models random_access_iterator, then views::counted(it,
count) is expression-equivalent to ranges::subrange(it, it +
static_cast<D>(count)),
* otherwise, views::counted(it, count) is expression-equivalent to
ranges::subrange(std::counted_iterator(it, count),
std::default_sentinel).


Otherwise, views::counted(it, count) is ill-formed.


Expression-equivalent


Expression e is expression-equivalent to expression f, if


* e and f have the same effects, and
* either both are constant subexpressions or else neither is a constant
subexpression, and
* either both are potentially-throwing or else neither is potentially-throwing
(i.e. noexcept(e) == noexcept(f)).


Customization point objects


The name views::counted denotes a customization point object, which is a const
function object of a literal semiregular class type. For exposition purposes, the
cv-unqualified version of its type is denoted as __counted_fn.


All instances of __counted_fn are equal. The effects of invoking different instances
of type __counted_fn on the same arguments are equivalent, regardless of whether the
expression denoting the instance is an lvalue or rvalue, and is const-qualified or
not (however, a volatile-qualified instance is not required to be invocable). Thus,
views::counted can be copied freely and its copies can be used interchangeably.


Given a set of types Args..., if std::declval<Args>()... meet the requirements for
arguments to views::counted above, __counted_fn models


* std::invocable<__counted_fn, Args...>,
* std::invocable<const __counted_fn, Args...>,
* std::invocable<__counted_fn&, Args...>, and
* std::invocable<const __counted_fn&, Args...>.


Otherwise, no function call operator of __counted_fn participates in overload
resolution.


views::counted does not check if the range is long enough to provide all count
elements: use views::take if that check is necessary.

// Run this code


#include <ranges>
#include <iostream>


int main()
{
const int a[] = {1, 2, 3, 4, 5, 6, 7};
for(int i : std::views::counted(a, 3))
std::cout << i << ' ';
std::cout << '\n';


const auto il = {1, 2, 3, 4, 5};
for (int i : std::views::counted(il.begin() + 1, 3))
std::cout << i << ' ';
std::cout << '\n';
}


1 2 3
2 3 4


Defect reports


The following behavior-changing defect reports were applied retroactively to
previously published C++ standards.


DR Applied to Behavior as published Correct behavior
P2393R1 C++20 implicit conversion from an integer-class type made explicit
to size_t might be invalid


ranges::take_view a view consisting of the first N elements of another view
views::take (class template) (range adaptor object)
(C++20)
ranges::subrange combines an iterator-sentinel pair into a view
(C++20) (class template)
counted_iterator iterator adaptor that tracks the distance to the end of the range
(C++20) (class template)
ranges::count
ranges::count_if returns the number of elements satisfying specific criteria
(C++20) (niebloid)
(C++20)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.