7.6 Foreach Loops
A second form of for loops allows iteration over elements of
containers. If ys is an expression denoting a container (vector,
row vector, matrix, or array) with elements of type T, then the
following is a well-formed foreach statement.
for (y in ys) {
... do something with y ...
}
The order in which elements of ys are visited is defined for container types as follows.
vector,row_vector: elements visited in order,yis of typedoublematrix: elements visited in column-major order,yis of typedoubleT[]: elements visited in order,yis of typeT.
Consequently, if ys is a two dimensional array real[ , ], y will
be a one-dimensional array of real values (type real[]). If ’ysis a matrix, thenywill be a real value (typereal`). To loop over
all values of a two-dimensional array using foreach statements would
require a doubly-nested loop,
real yss[2, 3];
for (ys in yss)
for (y in ys)
... do something with y ...
whereas a matrix can be looped over in one foreach statement
matrix[2, 3] yss;
for (y in yss)
... do something with y...
In both cases, the loop variable y is of type real. The elements of the matrix are visited in column-major order (e.g.,y[1, 1],y[2, 1],y[1, 2], ...,y[2, 3]), whereas the elements of the two-dimensionl array are visited in row-major order (e.g.,y[1, 1],y[1, 2],y[1, 3],y[2, 1], ...,y[2, 3]`).