for i in range(10): # Insert clever statement below print iDoing that same thing in C++ would require some for loop like the one below:
for(size_t i(0); i < 10; ++i) std::cout << i << std::endl;Which is larger and less clearer(well, not that much :D). So I created a simple wrapper to achieve the same thing in C++, using C++11's range-based for loops. The wrapper can be found here.
In order to use ranges, a function named range should be used, which contains these overloads:
// Returns a range_wrapper<T> containing the range [start, end) template<class T> range_wrapper<T> range(const T &start, const T &end) { return {start, end}; } // Returns a range_wrapper<T> containing the range [T(), end) template<class T> range_wrapper<T> range(const T &end) { return {T(), end}; }range_wrapper<> is a simple wrapper that defines begin() and end(), both return a range_iterator, the former one pointing to the beginning of the range and the latter to the end. The range_iterator<> class template is just a wrapper over the template parameter, and defines all of the forward iterator required member functions/typedefs. The prefix/suffix increment operators apply the same operator on the wrapped object, while the dereference operator returns it.
Since range-based for loops require the iterated sequence to define begin() and end() or that the global std::begin()/end() functions are defined for the given type, using the range_wrapper<> class template in these for loops is perfectly valid.
Using this wrapper, that code can be reduced to this:
// Prints numbers in range [0, 10) for(auto item : range(10)) std::cout << item << std::endl;Using the first overload, which takes the start and end of the range, we can indicate the starting number.
// Prints numbers in range [5, 15) for(auto item : range(5, 15)) std::cout << item << std::endl;Note that range is a template function, so it could be adapted to perform range iteration through other types(std::string comes to my mind right now).
This same thing can be achieved using boost::irange, but hey, I was bored and wanted to implement it myself.
Thank you!
ReplyDeletedata science with python training
ReplyDeleteartificial intelligence course training
pcb design training
ReplyDeletedata science with python training
machine learning online course
artificial intelligence course training