A pair of iterators defines a range
Now that we understand the fundamental concept of an iterator, let's put it to some practical use. We've already seen that if you have a pair of iterators as returned from begin()
and end()
, you can use a for-loop to iterate over all the elements of the underlying container. But more powerfully, you can use some pair of iterators to iterate over any sub-range of the container's elements! Let's say you only wanted to view the first half of a vector:
template<class Iterator> void double_each_element(Iterator begin, Iterator end) { for (auto it = begin; it != end; ++it) { *it *= 2; } } int main() { std::vector<int> v {1, 2, 3, 4, 5, 6}; double_each_element(v.begin(), v.end()); // double each element in the entire vector double_each_element(v.begin(), v.begin()+3); // double each element in the first half of the vector double_each_element(&v[0], &v[3...