﻿# V791\. The initial value of the index in the nested loop equals 'i'\. Consider using 'i \+ 1' instead\.

The analyzer has detected a faulty or suboptimal loop\. A standard pattern is used where some operation is executed for every pair of elements of an array\. This operation, however, is usually not required for a pair whose members are the same element, i\.e\. when 'i \=\= j'\.

For example:

```cpp
for (int i = 0; i < size; i++)
  for (int j = i; j < size; j++)
    ...
```

It is highly possible that a more correct and effective way to traverse the arrays would probably be this:

```cpp
for (int i = 0; i < size; i++)
  for (int j = i + 1; j < size; j++)
    ...
```

The next example is taken from a real application; the authors implemented their own algorithm to sort devices by priority but it is non\-optimal:

```cpp
/* Simple bubble sort */
for (i = 0; i < n_devices; ++i) {
  for (uint32_t j = i; j < n_devices; ++j) {
    if (devices[i]->prio > devices[j]->prio) {
      struct device_t *tmp;
      tmp = devices[i];
      devices[i] = devices[j];
      devices[j] = tmp;
    }
  }
}
```

Fixed code:

```cpp
/* Simple bubble sort */
for (i = 0; i < n_devices - 1; ++i) {
  for (uint32_t j = i + 1; j < n_devices; ++j) {
    if (devices[i]->prio > devices[j]->prio) {
      struct device_t *tmp;
      tmp = devices[i];
      devices[i] = devices[j];
      devices[j] = tmp;
    }
  }
}
```