As stated above, I am trying to get the elements of a 2D matrix using only C++
The matrix has MxN dimensions, and it may be so that N!=M, N >= M or M < N (basically the dimensions can be anything and are determined in execution time)
I have tried to go about it using 2 nested for loops but so far the code just keeps getting more & more complex & does not produce consistent results.
I am trying to get the 2nd for loop to iterate through the colored cells of the matrix starting from top left - i.e. in every loop the amount/position of the cells that the 2nd loop iterates through keeps changing & I am starting to wonder whether this can be done at all given that N & M are not known on compile time.
Thanks for your time in advance.
~EDIT1:
Here is what the iteration of the elements would look like for a non square matrix (same thing applies if the rows where more than the columns)

~EDIT2: Here is the code so far: (testable!)
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
void func(void);
// use these variables to specify the dimensions arbitrarily
// keep in mind I need this to work with relatively big matrices
int row = 5, col = 5;
string arr[][10]= {{"0",   "0",     "0",   "0",    "0",   "0",   "0",    "0",   "0",   "0"  },
       {"0",  "1,1",   "1,2", "1,3",  "1,4", "1,5", "1,6",  "1,7", "1,8", "1,9" },
       {"0",  "2,1",   "2,2", "2,3",  "2,4", "2,5", "2,6",  "2,7", "2,8", "2,9" },
       {"0",  "3,1",   "3,2", "3,3",  "3,4", "3,5", "3,6",  "3,7", "3,8", "3,9" },
       {"0",  "4,1",   "4,2", "4,3",  "4,4", "4,5", "4,6",  "4,7", "4,8", "4,9" },
       {"0",  "5,1",   "5,2", "5,3",  "5,4", "5,5", "5,6",  "5,7", "5,8", "5,9" },
       {"0",  "6,1",   "6,2", "6,3",  "6,4", "6,5", "6,6",  "6,7", "6,8", "6,9" },
       {"0",  "7,1",   "7,2", "7,3",  "7,4", "7,5", "7,6",  "7,7", "7,8", "7,9" },
       {"0",  "8,1",   "8,2", "8,3",  "8,4", "8,5", "8,6",  "8,7", "8,8", "8,9" },
       {"0",  "9,1",   "9,2", "9,3",  "9,4", "9,5", "9,6",  "9,7", "9,8", "9,9" }  };
bool f = false, f2 = false;
int main (void)
{
    func();
    return 0;
}
void func(void)
{
    if(row < col)
    {
        //remember that row > col
        f = true;
    }
    unsigned short m_i;       //mask for the counter of the outer for loop (i) - counts how many times the 
    unsigned short j_end = 1; //stores the max number of iterations the inner loop should do - increments accordingly
    unsigned short  k = 1;    //stores the starting index of the inner loop - starts incrementing once (j_end == col)
    cout << "row = " << row << ", col = " << col << endl;
    cout << "total \"i\" loops " << (row + col -1) << endl << endl;
    for (unsigned short i=1; i<=row + col -1; i++)   // row + col -1 is the total number of diagonals in any matrix
    {                                                // and also the total number of iterations we need
        if( i > row)      // here I implement the row > col scenario, the rest should be similar 
        {
             m_i = row;    // the mask should never go above the max row number 
        }else if(i == row)
        {
             m_i = row;
             if (f = true) f2 = true;    // using f2 remember that we've reached the max number for rows
        }else{
             m_i = i;     // (i < row) so just pass i
        }
    for(unsigned short j=k; j<=j_end; j++){      
        cout<< arr[m_i][j]<<" ";
        if(m_i > 1){               
            m_i--;
        }else{
            m_i = 1;
        }           
    }
    cout<<endl<< "*************" << endl;
    if(j_end == col )
    {                              
        k++;        // increment starting index of inner loop
    }else{
        j_end++;    // max number for inner loop not yet achieved so increment max number 
    }
    if(m_i == row)
    {
        k++;
    }
    } // end outer loop
}  // end func
You can use this code to test it for yourself the output should be something like this:

And you can change the row & col values to test for different dimensions.
So far I believe this code works for square matrices, but not so much when row != col
~EDIT3:
func() should take performance into consideration as I said before I expect the matrices to be quite large!
