常量映射迭代器不会设置为mymap.begin()

pig*_*d10 10 c++ iterator constants map

map<string,Shopable*>::iterator it = mymap.begin();
Run Code Online (Sandbox Code Playgroud)

迭代器似乎是常量,但items.begin()不返回常量迭代器.或者,这就是我的想法,因为鼠标悬停错误是这样的:

"No conversion from 'std::Tree_const_iterator<...> to std::Tree_iterator<...> exists'".
Run Code Online (Sandbox Code Playgroud)

为什么?

Naw*_*waz 20

使用const_iterator如:

map<string,Shopable*>::const_iterator it = mymap.begin();
Run Code Online (Sandbox Code Playgroud)

从错误,它明确mymap.begin()返回const_iterator.这是因为mymapconst在你写这个,像以下功能:

void f(const std::map<int,int> & m)
{    //^^^^^ note this

      std::map<int,int>::const_iterator it = m.begin(); //m is const in f()
                       //^^^^^ note this
}

void g(std::map<int,int> & m)
{
      std::map<int,int>::iterator it = m.begin(); //m is non-const in g()
}
Run Code Online (Sandbox Code Playgroud)

即,const容器(无论是它的std::map,std::vector等等)返回 const_iterator和非const容器返回iterator.

每个容器都有重载函数begin()end().所以const容器调用重载的begin()返回const_iterator,而非const容器调用另一个重载的begin()返回iterator.对于end()重载函数也是如此.