【问题标题】:array type int[n][n] is not assignable, because of expression must have a constant value数组类型 int[n][n] 不可赋值,因为表达式必须有一个常量值
【发布时间】:2018-10-11 16:42:21
【问题描述】:

我得到了错误:表达式必须在第 4 行有一个常量值(int cost[n][n]),并且基于它的进一步错误,即“数组类型 int[n][n] 不可赋值” 。 我该如何解决?

 int optimalSearchTree(int keys[], int freq[],  int n)
    {
        /* Create an auxiliary 2D matrix to store results of subproblems */

        int cost[n][n];
        for (int i = 0; i < n; i++)
            cost[i][i] = freq[i];

        for (int L = 2; L <= n; L++)
        {
            // i is row number in cost[][]
            for (int i = 0; i <= n - L + 1; i++)
            {
                // Get column number j from row number i and chain length L
                int j = i + L - 1;
                cost[i][j] = INT_MAX;

                // Try making all keys in interval keys[i..j] as root
                for (int r = i; r <= j; r++)
                {
                    // c = cost when keys[r] becomes root of this subtree
                    int c = ((r > i) ? cost[i][r - 1] : 0) +
                        ((r < j) ? cost[r + 1][j] : 0) +
                        sum(freq, i, j);
                    if (c < cost[i][j])
                        cost[i][j] = c;
                }
            }
        }
        return cost[0][n - 1];
    }

【问题讨论】:

  • 使用合适的容器,例如:std::vector
  • int cost[n][n]; 不是有效的 C++。
  • 喜欢 std::vector int cost[n][n]?
  • @NeilButterworth 对于一个 1 级的人来说,n*n 向量的语法是什么并不明显(我必须查一下)让我们有点好意

标签: c++


【解决方案1】:

在 c++ 中创建动态 n*n 大小的二维数组的标准方法是这样的

std::vector<std::vector<int> > cost(n,std::vector<int>(n));

Vector of vectors, reserve

【讨论】:

  • 虽然很多时候用向量的向量来表示矩阵并不是一个好主意,但那是另一回事。
  • @Slava - 请发布替代方案。我同意 vec 的 vec 可能没有纯二维数组那么快
  • @pm100 大小为 n * n 的元素的一维数组或向量,以及用于从两个二维索引正确计算一维索引的运算符或函数。
  • 这是一个非常有用的构造,令人惊讶的是它没有任何标准,也许在 boost 中?
  • 有人可以发布另一个答案 Slava 吗?尼尔 B?
猜你喜欢
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-21
  • 1970-01-01
  • 2021-12-02
  • 2012-07-27
  • 1970-01-01
相关资源
最近更新 更多