小编Bra*_*son的帖子

在创建和不创建模板的情况下递增迭代器

我正在编写一行非常简单的代码来显示地图容器的内容,但遇到了一个有趣的错误。如果我写:

    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 。但是编译器到底在做什么呢?

谢谢你的时间。

c++ containers iterator stl increment

0
推荐指数
1
解决办法
42
查看次数

标签 统计

c++ ×1

containers ×1

increment ×1

iterator ×1

stl ×1