cbegin()和cend() -- 返回const_iterator对象

C++11开始,可以使用关键字auto代替迭代器的精确类型。
因此如果我们直接以begin()初始化迭代器,就可以使用auto声明其类型:

for(auto pos = obj.begin(); pos != obj.end(); ++pos)
{
    cout << *pos << ' ';
}

auto优点之一就是程序比较浓缩精简。
如果没有auto,循环内生命迭代器动作应该(举例)如下:

for(list<char>::const_iterator pos = obj.begin();
    pos != obj.end();
    ++pos)
{
    cout<< *pos << ' ';
}

另一个优点是,采用这种循环写法,万一容器类型有所改变,程序整体仍能保持较佳的强壮性。
然而缺点是
迭代器丧失常量性,可能引发“计划外的赋值”风险。
因为

auto pos = obj.begin()

会使pos成为一个非常量迭代器,此乃因为begin()返回的是个类型为cont::iterator的对象。
为确保仍可使用常量迭代器,c++11起容器提供cbegin()和cend(),它们返回一个类型为cont::const_iterator
的对象:

for(auto pos = obj.cbegin(); pos != obj.cend(); ++pos)
{
    ...
}

你可能感兴趣的:(iterator,cbegin,cend)