【问题标题】:C2100:illegal indirectionC2100:非法间接
【发布时间】:2018-05-14 14:00:11
【问题描述】:

我正在尝试解决以下动态规划问题:给定无限数量的硬币(25)、硬币(10)、镍币(5)和便士(1),编写代码来计算表示 n 的方式数美分。

这是我的代码:

int coins(int n,unordered_map<int,int>& memo){
    if (n < 0){
        return 0;
    }
    else if (n == 1){
        return 1;
    }
    else if (n == 5){
        return 2;
    }

    unordered_map<int, int>::iterator iter = memo.find(n);
    int coinsValue;
    if (iter == memo.end()){
        coinsValue = coins(n - 1,memo) + coins(n - 5,memo) + coins(n - 10,memo) + coins(n - 25,memo);
        memo.insert(n, coinsValue);
    }

    return iter->second;
}

int coins(int n){
    unordered_map<int, int> memo;
    return coins(n, memo);

}


int main(){
    cout << coins(10) << endl;
    return 0;
}

我收到以下错误:

error C2100:illegal indirection

但我找不到导致问题的原因,代码看起来很干净。

【问题讨论】:

  • 您能否向我们展示整个错误消息,而不仅仅是“非法间接”?
  • 此外,您必须提取minimal reproducible example。没有它,您的问题将被视为题外话。
  • memo.insert(n, coinsValue); 应该是 memo.emplace(n, coinsValue); std::unordered_map::insert 期望单个 value_typestd::pair&lt;const Key, T&gt;
  • iterif 之后仍然是end(),导致无效的取消引用。
  • 代码试图解决什么问题?

标签: c++ stl dynamic-programming


【解决方案1】:

您插入错误。应该是:

memo.insert(pair<int,int>(n, coinsValue));

或者更简单的只是使用:

memo[n] = coinsValue;

确保在以下行中返回memo[n],否则您将得到Segmentation fault.

【讨论】:

    猜你喜欢
    • 2013-04-15
    • 2016-05-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    相关资源
    最近更新 更多