用vc++声明迭代器

iterator declaration with VC++

本文关键字:迭代器 声明 vc++      更新时间:2023-10-16

我试图声明一个迭代器,但我有问题。我用的是vc++ 2010

#include<iterator> 
#include<map>
using namespace std;
using std::regex_replace;
template <class KTy, class Ty>
void PrintMap(map<KTy, Ty> map)
{
   **:iterator iterator;
      for (iterator p = map.begin(); p != map.end(); p++)
    cout << p->first << ": " << p->second << endl;** 
}

错误信息是:

错误1 C2143:语法错误:在':'之前缺少';' (for:iterator iterator;)

首先,您想将参数名称更改为map以外的名称,因为它也是类型名称,因此会产生歧义。

假设您希望迭代器类型为typedef,请使用:

typedef typename map<KTy, Ty>::iterator iterator;
for (iterator p = my_map.begin(); p != my_map.end(); p++) {
    cout << p->first << ": " << p->second << endl;
}

注意:您需要typename关键字,因为类型依赖于模板参数

错误是您将变量命名为map,这是一个类型名。

void PrintMap(map<KTy, Ty> map)
{
   **:iterator iterator;
      for (iterator p = map.begin(); p != map.end(); p++)
    cout << p->first << ": " << p->second << endl;** 
}

template <typename KTy, typename Ty>
void PrintMap(map<KTy, Ty> mymap)
{   
    typedef typename map<KTy, Ty>::iterator iterator;       
    for (iterator p = mymap.begin(); p != mymap.end(); p++)
        cout << p->first << ": " << p->second << endl;
}