...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
template< typename Sequence > struct size { typedef unspecified type; };
size
returns the number of elements in the sequence, that is, the number of elements in the range [begin<Sequence>::type,end<Sequence>::type)
.
#include "boost/mpl/size.hpp"
Parameter | Requirement | Description |
---|---|---|
Sequence | A model of Sequence |
Expression | Expression type | Precondition | Semantics | Postcondition |
---|---|---|---|---|
typedef size<Sequence>::type s; | A model of Integral Constant | Equivalent to typedef distance< begin<Sequence>::type,end<Sequence>::type >::type s; | s::value >= 0 |
The complexity of the size
algorithm directly depends on the implementation of the particular sequence it is applied to. In the worst case size
has a linear complexity. As a general rule, if the Sequence
is a Random Access Sequence, you can be certain that size<Sequence>::type
is an amortized constant time operation. The opposite is not necessary true - for example, a model of Forward Sequence still can guarantee you an amortized constant time size
complexity. Please refer the documentation page of the concrete sequence type for further information.
typedef list0<> empty_list; typedef vector_c<int,0,1,2,3,4,5> numbers; typedef range_c<int,0,100> more_numbers;BOOST_STATIC_ASSERT(size<list>::type::value == 0); BOOST_STATIC_ASSERT(size<numbers>::type::value == 5); BOOST_STATIC_ASSERT(size<more_numbers>::type::value == 100);