While iterating over a vector in c++, I noticed there is a begin()
function in the standard library, and also a begin()
as a member function of the vector
class. What, if any, is the difference between the two, and which should be used over the other?
Example:
vector<int> numbers;
//Code to put values in my vector
for (vector<int>::iterator i = numbers.begin(); i < numbers.end(); i++)
cout << *i << '\n';
vs:
vector<int> numbers;
//Code to put values in my vector
for (vector<int>::iterator i = std::begin(numbers); i < std::end(numbers); i++)
cout << *i << '\n';
std::begin()
was added in C++11 to make it easier to write generic code (e.g. in templates). The most obvious reason for it is that plain C-style arrays do not have methods, hence no .begin()
. So you can use std::begin()
with C-style arrays, as well as STL-style containers having their own begin()
and end()
.
If you're writing code which is not a template, you can ignore std::begin()
; your fellow programmers would probably find it odd if you suddenly started using it everywhere just because it's new.