Tar*_*ama 40
begin将返回一个iterator或一个const_iterator取决于它被调用的对象的const限定.
cbegin将const_iterator无条件返回.
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
hea*_*ter 20
begin()返回一个iterator到开头,而cbegin()返回一个const_iterator到开头。
这两者之间的基本区别是iterator(即begin())让您更改它所指向的对象的值,const_iterator而不会让您更改该对象的值。
例如:
这是允许的。向量值变为{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;
}
这是不允许的。它会抛出一个错误:
for (it = v.cbegin(); it != v.cend(); it++)
{
    *it = *it - 10;
}