begin(),end()和cbegin(),cend()之间有什么区别?

时间:2018-04-28 00:57:50

标签: c++ stl

虽然我们遍历begin(),end()和cbegin(),cend()。 它们给了我们相同的结果。但它们之间有什么区别?

#include<iostream>
#include<map>
using namespace std;
int main()
{
    map<char,int>mp;
    mp['a']=200;
    mp['b'] = 100;
    mp['c']=300;
    for(auto it =mp.cbegin();it!=mp.cend();it++)
    {
        cout<<it->first<<" "<<it->second<<endl;
    }
cout<<endl;
     for(auto it =mp.begin();it!=mp.end();it++)
    {
        cout<<it->first<<" "<<it->second<<endl;
    }

    return 0;
}

2 个答案:

答案 0 :(得分:5)

存在两个差异,这些差异非常相关。

第一个区别是cbegin没有重载,它是const限定的,而begin被两个函数重载,其中一个是const限定的而另一个不是。

第二个区别在于它们返回的迭代器的类型。根据文档,cbegin会返回const_iterator,而begin的一次重载会返回iterator,另一次会返回const_iterator(例如cbegin)。

答案 1 :(得分:3)

cbegin :返回指向容器中第一个元素的const_iterator。
开始:返回指向序列中第一个元素的迭代器 cend :返回指向容器中过去元素的const_iterator。
end :返回指向序列中过去元素的迭代器。

  

http://www.cplusplus.com/reference/map/map/cbegin/   http://www.cplusplus.com/reference/iterator/begin/?kw=begin   http://www.cplusplus.com/reference/map/map/cend/   http://www.cplusplus.com/reference/iterator/end/?kw=end