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)
{
    ...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值