C++ 映射迭代器遍历技术

C++ 映射迭代器遍历技术,c++,map,iterator,C++,Map,Iterator,我在声明迭代器以遍历映射并查找值时遇到问题。我在“fibiter”之前得到一个预期初始值设定项错误 map <int, int> fibHash; int memoized_fib(int n) { map <int, int> iterator fibiter = fibHash.find(n); //ERROR HERE if(fibiter != fibHash.end()) return *fibiter; int

我在声明迭代器以遍历映射并查找值时遇到问题。我在“fibiter”之前得到一个预期初始值设定项错误

map <int, int> fibHash;

int memoized_fib(int n)
{
    map <int, int> iterator fibiter = fibHash.find(n); //ERROR HERE

    if(fibiter != fibHash.end())
        return  *fibiter;

    int fib_val;
    if(n  <= 1)
        fib_val = 1;
    else
        fib_val = memoized_fib(n - 1) + memoized_fib(n - 2);

    fibHash[n] = fib_val;
    return fib_val;
}

int main()
[..]
映射迭代器→ 迭代器

迭代器是在类映射中定义的typedef。 您可以在第139行中查看GCC 4.6.3附带的标准库的实现,您有:

typedef typename _Rep_type::iterator               iterator;
由于typedef属于类的定义,您应该添加:以便编译器知道在哪里可以找到它。

映射迭代器→ 迭代器

迭代器是在类映射中定义的typedef。 您可以在第139行中查看GCC 4.6.3附带的标准库的实现,您有:

typedef typename _Rep_type::iterator               iterator;

由于typedef属于类的定义,您应该添加:以便编译器知道在哪里可以找到它。

您忘记使用作用域解析运算符::。编译器认为您声明了一个名为iterator的映射,因此在找到fibiter时会非常困惑


是您想要的

您忘记使用范围解析运算符::。编译器认为您声明了一个名为iterator的映射,因此在找到fibiter时会非常困惑


是你想要的吗

你想买一双:'s吗?你想买一双:'s吗?