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.这是因为mymap是const在你写这个,像以下功能:
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()重载函数也是如此.
| 归档时间: |
|
| 查看次数: |
9376 次 |
| 最近记录: |