What is the difference between cbegin and begin for vector?
Solution 1:
begin
will return an iterator
or a const_iterator
depending on the const-qualification of the object it is called on.
cbegin
will return a const_iterator
unconditionally.
std::vector<int> vec;
const std::vector<int> const_vec;
vec.begin(); //iterator
vec.cbegin(); //const_iterator
const_vec.begin(); //const_iterator
const_vec.cbegin(); //const_iterator
Solution 2:
begin()
returns an iterator
to beginning while cbegin()
returns a const_iterator
to beginning.
The basic difference between these two is iterator
(i.e begin()
) lets you change the value of the object it is pointing to and const_iterator
will not let you change the value of the object.
For example:
This IS allowed. The vector values change to {0,10,20,30,40}
:
vector<int> v{10,20,30,40,50};
vector<int> :: iterator it;
for (it = v.begin(); it != v.end(); it++)
{
*it = *it - 10;
}
This is NOT allowed. It will throw an error:
for (it = v.cbegin(); it != v.cend(); it++)
{
*it = *it - 10;
}