虽然我们遍历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;
}
答案 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