begin
将根据调用它的对象的const限定符返回一个迭代器或const迭代器。
cbegin
无条件地返回一个const迭代器。
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
begin()
返回一个指向开头的迭代器,而 cbegin()
返回一个指向开头的常量迭代器。
这两者之间的基本区别是迭代器(即 begin()
)允许修改其指向的对象的值,而常量迭代器则不允许修改对象的值。
例如:
以下操作是允许的。向量的值更改为{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;
}
begin()
并不总是返回iterator
:它取决于容器的常量性。如果容器是常量的,begin()
将返回const_iterator
而不是iterator
。 - undefined
const_iterator
和iterator
之间有什么区别? - user12211554