如何解决在创建和不创建模板的情况下增加迭代器
我正在编写非常简单的代码行来显示地图容器的内容,但遇到一个有趣的错误。 如果我写:
void DisplayMap(const map<int,string>& myMap)
{
for (const map<int,string>::const_iterator myIterator = myMap.begin();
myIterator != myMap.end(); ++myIterator)
{
cout << myIterator->first << ": " << myIterator->second << endl;
}
}
编译器反对我使用++myIterator
,声称此函数没有类型为'++'的重载运算符。但是,如果我将其作为模板:
template <typename T>
void DisplayMap(const T& myMap)
{
for (map<int,string>::const_iterator myIterator = myMap.begin(); myIterator != myMap.end(); ++myIterator)
{
cout << myIterator->first << ": " << myIterator->second << endl;
}
}
然后没有问题。该代码运行完美。我希望有人可以解释为什么编译器在这里没有问题。据我了解,将函数设为模板类似于对变量类型调用auto。但是编译器到底在做什么?
感谢您的时间。
解决方法
大多数迭代器和模板的内容在这里都不重要。相关的是const
:
for (const map<int,string>::const_iterator myIterator = myMap.begin();
myIterator != myMap.end(); ++myIterator)
^^ !!!
您无法递增const iterator
,因为它是const
。您将收到类似的错误
for (const int i= 0; i< N; ++i) {
在这里,i
不能递增,因为它是const
。
在模板版本中,您放下了const
,这就是为什么没有错误的原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。