Bra*_*son 0 c++ containers iterator stl increment
我正在编写一行非常简单的代码来显示地图容器的内容,但遇到了一个有趣的错误。如果我写:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
编译器反对我使用++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;
}
}
Run Code Online (Sandbox Code Playgroud)
那么就没有问题了。代码运行完美。我希望有人能解释为什么编译器在这里没有问题。据我了解,使函数成为模板类似于为变量类型调用 auto 。但是编译器到底在做什么呢?
谢谢你的时间。
大多数迭代器和模板的东西在这里并不相关。相关的是const:
for (const map<int, string>::const_iterator myIterator = myMap.begin();
myIterator != myMap.end(); ++myIterator)
^^ !!!
Run Code Online (Sandbox Code Playgroud)
你不能增加 aconst iterator因为它是const。你会得到类似的错误
for (const int i= 0; i< N; ++i) {
Run Code Online (Sandbox Code Playgroud)
在这里,i不能递增,因为它是const。
在您的模板版本中,您删除了const,这就是没有错误的原因。
| 归档时间: |
|
| 查看次数: |
42 次 |
| 最近记录: |