带索引二维数组的逗号运算符
Comma Operator with indexing 2D arrays
我有这个算法,它是图论 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 开始。
您必须复习如何访问二维数组的元素。另外,看看 comma operator 做了什么。您必须使用 []
两次:
adjacencyMatrix[0][i]
以下:
adjacencyMatrix[0, i]
相当于:
adjacencyMatrix[i]
这仍然会给您留下一维数组。而且,正如错误消息所说:
distanceArray[i] = adjacencyMatrix[i];
// ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
// unsigned int array of unsigned ints
你不可能指望这个任务会发生。
我有这个算法,它是图论 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 开始。
您必须复习如何访问二维数组的元素。另外,看看 comma operator 做了什么。您必须使用 []
两次:
adjacencyMatrix[0][i]
以下:
adjacencyMatrix[0, i]
相当于:
adjacencyMatrix[i]
这仍然会给您留下一维数组。而且,正如错误消息所说:
distanceArray[i] = adjacencyMatrix[i];
// ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
// unsigned int array of unsigned ints
你不可能指望这个任务会发生。