Using a Range for with Multdimensional Arrays.

来源:互联网 发布:my sql has gone away 编辑:程序博客网 时间:2024/05/29 14:22
size_t cnt = 0;for (auto &row: ia)  for (auto &col : row) {    col = cnt;    ++cnt;}

In the previous example ,we used frefernces as our loop control variables because we wanted to change the elements in the array. However, there is a deeper reason for using references. As an example, consider the following loop:

for (const auto &row: ia)  for ( auto col : row)    cout << col << endl;

This loop does not write to the elements, yet we still define the control variable of the outer loop as refernce. We do so in order to avoid the normal array to pointer conversion.  Had we neglected the refernce and written these loops as:

for (auto row : ia)  for (auto col : row)

our program would not compile. As before, the first for iterates through ia, whose elements are arrays of size 4. Because row is not a reference, when the compiler initializes row it will convert each array element (like any other object of array type) to a pointer that array's first element. As a result, in this loop the type of row is int*. The inner for loop is illegal. Despite our intentions, that loop attempts to iterate over an int*.

Note: To use a multidimensional array in a range for, the loop control varaible for all but the innermost array must be references.

0 0
原创粉丝点击