映射迭代器遍历技术



我在声明迭代器遍历地图并查找值时遇到问题。我收到"'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()
[..]

您忘记使用范围解析运算符 :: 。编译器认为你声明了一个名为iteratormap<int, int>,因此当它找到fibiter时会感到非常困惑。

map<int, int>::iterator fibiter

是你想要的

map <int, int> iteratormap <int, int>::iterator

迭代器是在类"map"中定义的typedef。您可以在第 139 行<bits/stl_map.h> GCC 4.6.3 附带的标准库的实现中查找,您有:

typedef typename _Rep_type::iterator               iterator;

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

最新更新