2012-10-05 195 views
1

我有問題,聲明迭代器遍歷映射並查找值。我在'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() 
[..] 
+1

你想購買一雙':'的? –

回答

4

您忘記使用範圍解析運算符::。編譯器認爲你聲明瞭名爲iteratormap<int, int>,因此當它找到fibiter時會受到強烈的困惑。

map<int, int>::iterator fibiter 

是你想要的

1

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

迭代是類 「地圖」 內定義一個typedef。 你可以看一下,最多在<bits/stl_map.h>線139 GCC 4.6.3附帶的標準庫的實現,您有:

typedef typename _Rep_type::iterator    iterator; 

由於typedef的屬於類的定義,你應該添加「 :「以便編譯器知道在哪裏找到它。