【问题标题】:Comma Operator with indexing 2D arrays带有索引二维数组的逗号运算符
【发布时间】:2016-03-09 23:10:54
【问题描述】:

我有这个算法,它是用于图论的 dijkstra 算法的伪代码。首先是一个基本的 for 循环。

visitedSet[0] = true //visitedSet is a array of bools
for (int i = 1; i <= numberNodes; ++i)
{
    distanceArray[i] = adjacencyMatrix[0,i];
    //distanceArray is 1D with size of fifty
    //adjacencyMatrix is 2D with size of fifty
    //Both arrays hold values of unsigned ints
}

这里是数组定义

enum GraphLimit300 {MAX_NODES = 50};
unsigned int adjacencyMatrix[MAX_NODES][MAX_NODES];
unsigned int distanceArray[MAX_NODES];

Visual Studio 给了我一个数组,说我不能将一个无符号整数数组分配给一个指针。我在网上查到,在这种情况下,逗号运算符基本上会抛出第一种情况,0,并将其视为distanceArray[i] = adjacencyMatrix[i];,这对我来说没有意义,因为adjacenyMatrix 是一个二维数组。我只是想知道是什么给了我这个编译错误并获得了更多关于为什么的信息,因为我基本上只是复制了伪代码基本上所说的变量名。

伪代码:

    S = { 1 }
for ( index = 2; index <= N; ++ index )
    D[ index ] = C[ 1, index ]
for ( index = 1; index <= N – 1; ++ index )
    Choose a vertex v in V – S such that D[ v ] is a minimum
    Add v to S
    for each vertex w in V – S do
        D[ w ] = min( D[ w ], D[ v ] + C[ v, w ] )

上面的伪代码使用列表来表示它们的数组,它们出于某种原因从 1 开始,所以我在代码中将其修改为从 0 开始。

【问题讨论】:

  • 您没有向我们展示distanceArrayadjacencyMatrix 的声明,这会使您的问题无法回答。
  • 我在第一个代码块中加入了 cmets,字面上说明了它们是如何声明的。我现在将它放在一个单独的代码块中。 @CareyGregory
  • [0,i] [0][i] 时打错了。
  • @CareyGregory 我的伪代码中可能有错字。我知道在这里发帖的每个人都是对的。
  • 某些语言确实使用[x,y] 语法来索引双精度数组,因此您可能会在伪代码中看到这一点,但您不应该期望伪代码使用任何语言的正确语法。

标签: c++ arrays graph-theory comma-operator


【解决方案1】:

您必须查看如何访问二维数组的元素。另外,看看comma operator 做了什么。你必须使用[] 两次:

adjacencyMatrix[0][i]

以下内容:

adjacencyMatrix[0, i]

相当于:

adjacencyMatrix[i]

这仍然会给您留下一维数组。而且,正如错误消息所说:

   distanceArray[i] = adjacencyMatrix[i];
// ^^^^^^^^^^^^^^^^   ^^^^^^^^^^^^^^^^^^
//   unsigned int   array of unsigned ints

你不可能期望这个任务会发生。

【讨论】:

  • 然后去掉逗号操作符。除了混淆代码之外,它没有其他用途。
  • 就像我说的,我已经知道逗号运算符的作用,在这个语句中distanceArray[i] 将被分配一个指针。这给了我一个编译错误。
  • @DrakeJacks 当然是因为你试图将一个数组(一个指针)分配给distanceArray[i],这只是一个unsigned int.
  • @LogicStuff 你的评论说distanceArraybool 但它是unsigned int
猜你喜欢
  • 1970-01-01
  • 2017-09-11
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 2020-12-31
  • 2010-12-30
  • 2014-04-09
  • 1970-01-01
相关资源
最近更新 更多