we're eventually implementing STL iterators to iterator over the coefficients of a vector/matrix as well as over the columns or rows of a matrix, and your inputs might be welcome to help converging to a stable API, see below.
You can watch the WIP in PR 519 [1], and find some background in bug 231 [2]. Basically, to avoid ambiguities, we decided that iterators over coefficients would be defined for 1D _expression_ only, meaning that to iterate over the elements of a 2D Matrix you'll have to explicitly reshape it as a 1D vector first. Some typical examples:
VectorXd v;
MatrixXd A;
for(auto x : v) {...}
for(auto x : A.col(j)) {...}
for(auto x : A.row(i)) {...}
for(auto x : A.reshaped()) {...}
The last line iterate in column-major order regardless of the storage order of A. So far so good. Things get more tricky now.
To iterate over rows or columns, we need to define a proxy telling so. One option is to reuse (abuse?) rowwise()/colwise():
for(auto x : A..rowwise()) { ... }
Is it obvious to everyone that this line is iterating over the rows of A and is thus a synonym for:
for(int i=0;i<A.rows();++i) { auto x = A.row(i); ... }
??
On my side, I'm rather reading it as "iterate over all elements of A in row-major order", which is unfortunate as if I'm not alone with such an interpretation, then we need to come up with new names. Since rows()/cols() are already taken, we could think of:
for(auto x : A.allRows()) { ... }
for(auto x : A.rowSet()) { ... }
?????
Feel free to share your opinion on that question as well as on the other minor issues discussed in the PR.