【问题标题】:Map iterators traversal technique映射迭代器遍历技术
【发布时间】:2012-10-05 22:39:37
【问题描述】:

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

【问题讨论】:

  • 你想买一对:的吗?

标签: c++ map iterator


【解决方案1】:

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

map<int, int>::iterator fibiter

是你想要的

【讨论】:

    【解决方案2】:

    map &lt;int, int&gt; iteratormap &lt;int, int&gt;::iterator

    iterator 是在“map”类中定义的 typedef。 您可以在&lt;bits/stl_map.h&gt; 第 139 行中查看 GCC 4.6.3 附带的标准库的实现,您有:

    typedef typename _Rep_type::iterator               iterator;
    

    由于typedef属于类的定义,所以要加上“:”,以便编译器知道在哪里找到它。

    【讨论】:

      猜你喜欢
      • 2011-05-11
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 2011-02-28
      • 2018-04-01
      • 2012-10-22
      相关资源
      最近更新 更多