![]() |
Eigen
3.4.90 (git rev a4098ac676528a83cfb73d4d26ce1b42ec05f47c)
|
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: |
---|---|
VectorXi v = VectorXi::Random(4);
cout << "Here is the vector v:\n";
for(auto x : v) cout << x << " ";
cout << "\n";
| Here is the vector v: -10 -8 5 -1 |
One dimensional expressions can also easily be passed to STL algorithms:
Example: | Output: |
---|---|
Array4i v = Array4i::Random().abs();
cout << "Here is the initial vector v:\n" << v.transpose() << "\n";
std::sort(v.begin(), v.end());
cout << "Here is the sorted vector v:\n" << v.transpose() << "\n";
General-purpose arrays with easy API for coefficient-wise operations. Definition: Array.h:49 | Here is the initial vector v: 10 8 5 1 Here is the sorted vector v: 1 5 8 10 |
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: |
---|---|
Matrix2i A = Matrix2i::Random();
cout << "Here are the coeffs of the 2x2 matrix A:\n";
for(auto x : A.reshaped())
cout << x << " ";
cout << "\n";
| Here are the coeffs of the 2x2 matrix A: -10 -8 5 -1 |
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: |
---|---|
ArrayXXi A = ArrayXXi::Random(4,4).abs();
cout << "Here is the initial matrix A:\n" << A << "\n";
for(auto row : A.rowwise())
std::sort(row.begin(), row.end());
cout << "Here is the sorted matrix A:\n" << A << "\n";
| Here is the initial matrix A: 10 1 4 7 8 6 9 10 5 10 2 9 1 4 0 1 Here is the sorted matrix A: 1 4 7 10 6 8 9 10 2 5 9 10 0 1 1 4 |