Since the version 3.4, Eigen's dense matrices and arrays provide STL compatible iterators. As demonstrated below, this makes them naturally compatible with range-for-loops and STL's algorithms.
Any dense 1D expressions exposes the pair of begin()/end()
methods to iterate over them.
This directly enables c++11 range for loops:
Example: | Output: |
---|---|
cout << "Here is the vector v:\n";
cout << "\n";
| Here is the vector v: 7 -2 6 6 |
One dimensional expressions can also easily be passed to STL algorithms:
Example: | Output: |
---|---|
Here is the initial vector v: 7 2 6 6 Here is the sorted vector v: 2 6 6 7 |
Similar to std::vector
, 1D expressions also exposes the pair of cbegin()/cend()
methods to conveniently get const iterators on non-const object.
STL iterators are intrinsically designed to iterate over 1D structures. This is why begin()/end()
methods are disabled for 2D expressions. Iterating over all coefficients of a 2D expressions is still easily accomplished by creating a 1D linear view through reshaped()
:
Example: | Output: |
---|---|
Here are the coeffs of the 2x2 matrix A: 7 -2 6 6 |
It is also possible to get iterators over rows or columns of 2D expressions. Those are available through the rowwise()
and colwise()
proxies. Here is an example sorting each row of a matrix:
Example: | Output: |
---|---|
Here is the initial matrix A: 7 9 5 3 2 6 1 0 6 3 0 9 6 6 3 9 Here is the sorted matrix A: 3 5 7 9 0 1 2 6 0 3 6 9 3 6 6 9 |