My own experiment https://github.com/tiger40490/repo1/blob/cpp1/cpp1/miscIVQ/spiral_FB.cpp shows
- had better default-populate with zeros. Afterwards, you can easily overwrite individual cells without bound check.
- it’s easy to insert a new row anywhere. Vector would be inefficient.
- To insert a new column, we need a simple loop
# zero-initialize a 5-row, 8-column matrix:
width, height = 8, 5
Matrix = [[0 for x in range(width)] for y in range(height)]
In any programming language, the underlying data structure is a uniform
pile-of-horizontal-arrays, therefore it’s crucial (and tricky) to understand indexing. It’s very similar to matrix indexing — Mat[0,1] refers to first row, 2nd element.
Warning: 2d array is hard to pass in c++, based on personal experience 😦 You often need to specify the size in the receiving function declaration. Even if this is feasible, it’s unwanted legwork.
 Warning — The concept of “column” is mathematical (matrix) and non-existent in our implementation, therefore misleading! I will avoid any mention of it in my source code. No object no data structure for the “column”!
 Warning — Another confusion due to mathematics training. Better avoid Cartesian coordinates. Point(4,1) is on 2nd row, 5th item, therefore arr — so you need to swap the subscripts.
|1st subscript||2nd subscript|
|height #rowCnt||45 #not an index value||<==|
|width #rowSz ||==>||78 #not an index value|
|example value||1 picks 2nd row||4 picks 5th item in the row|
|variable name||rowId, whichRow||subId |
|Cartesian coordinate||y=1 (Left index)||x=4|