Home | Libraries | People | FAQ | More |
Syntax |
Code |
---|---|
Pipe |
|
Pipe |
|
Function |
|
Function |
|
The index within each returned boost::range::index_value
is equal to start_index
+ the offset of the element from the beginning of the range. In the versions
of the functions that omit start_index
the starting index is taken to be 0
.
rng
to return elements that have the corresponding value from rng
and a numeric index.
boost::range::index_value< typename boost::range_reference<decltype(rng)>::type, typename boost::range_difference<decltype(rng)>::type >
The synopsis of index_value is as follows:
template<class T, class Indexable=std::ptrdiff_t> class index_value : public boost::tuple<Indexable, T> { public: typedef ...unspecified... index_type; typedef ...unspecified... const_index_type; typedef ...unspecified... value_type; typedef ...unspecified... const_value_type; // ...unspecified... constructors index_type index(); const_index_type index() const; value_type value(); const_value_type value() const; };
boost::indexed_range<decltype(rng)>
rng
if
and only if rng
is
not a Bidirectional
Range. If rng
is a Bidirectional
Range then the returned range category is Forward
Range. The rationale for the demotion of Bidirectional
Range inputs to Forward
Range is to avoid slow calculation of indices for boost::end(rng)
.
#include <boost/range/adaptor/indexed.hpp> #include <boost/assign.hpp> #include <iterator> #include <iostream> #include <vector> int main(int argc, const char* argv[]) { using namespace boost::assign; using namespace boost::adaptors; std::vector<int> input; input += 10,20,30,40,50,60,70,80,90; for (const auto& element : input | indexed(0)) { std::cout << "Element = " << element.value() << " Index = " << element.index() << std::endl; } return 0; }
This would produce the output:
Element = 10 Index = 0 Element = 20 Index = 1 Element = 30 Index = 2 Element = 40 Index = 3 Element = 50 Index = 4 Element = 60 Index = 5 Element = 70 Index = 6 Element = 80 Index = 7 Element = 90 Index = 8