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 rangeforloops 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";
Generalpurpose arrays with easy API for coefficientwise 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 nonconst 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 