Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ - Definition of 2d matrices of type std::array

I am looking to define two 2d matrices: f and f_transpose of the type: std::array <std::array <float, 3>, dim> and std::array <std::array <float, dim>, 3>. The value of dim is 23.

I want elements f[0][0], f[1][1], f[2][2], f_transpose[0][0], f_transpose[1][1] and f_transpose[2][2] to be 1 and the rest of the elements 0.

These arrays are global variables and I tried the following:

static array <array <float, 3>, dim> f = {{{{1}}, {{0, 1}}, {{0, 0, 1}}}};
static array <array <float, dim>, 3> f_transpose = {{{{1, 0, 0}}, {{0, 1, 0}}, {{0, 0, 1}}}};

This does give me 1 in necessary places, but some of the values that should be 0 are 1 or -1. My understanding is that whatever is not defined will be considered 0, but clearly that's not what is happening. How do I get around this problem?

Edit:

I had to remove the github link present here earlier. But for the answer (and comment) to make sense, I have added the relevant function below:

void print_ffamily(){

    cout << "F Matrix" << endl;
    for (int i = 0; i < 3; i++){
            for (int j = 0; j < dim; j++){
                printf("%0.2f ", f[i][j]);

            }
            cout << endl;
    }

    cout << "F transposed Matrix" << endl;
    for (int i = 0; i < dim; i++){
            for (int j = 0; j < 3; j++){
                printf("%0.2f ", f_transpose[i][j]);

            }
            cout << endl;
    }

}
like image 954
skr_robo Avatar asked Mar 24 '17 00:03

skr_robo


People also ask

What is 2D array in C++?

A two-dimensional array in C++ is the simplest form of a multi-dimensional array. It can be visualized as an array of arrays. The image below depicts a two-dimensional array. 2D Array Representation. A two-dimensional array is also called a matrix.

How do you initialize a 2D array in C++?

Here is an example of how to initialize a 2D array: int a[2][3] = { {0, 2, 1} , /* row at index 0 */ {4, 3, 7} , /* row at index 1 */ }; In above example, we have a 2D array which can be seen as a 2×3 matrix. There are 2 rows and 3 columns.

What is STD array?

std::array is a container that encapsulates fixed size arrays. This container is an aggregate type with the same semantics as a struct holding a C-style array T[N] as its only non-static data member.

How do you declare a STD array in C++?

The declaration of std::array is as follows: std::array<datatype,array_size> array_name; This is a simple declaration of an std::array.


1 Answers

I’m pretty sure both are correct.

For both you started list-initialization which is an aggregate initialization in this case.

For f_transpose you started an initializer for each of the 3 sub-arrays, the missing elements of each array are value-initialized which means zero-initialized for float.
For f you specify initializers for 3 arrays, for their elements the above applies too. The remaining arrays are indirectly (via value-initializaion, < C++11) or directly (≥ C++11) aggregate-initialized which value-initializes and therefore zero-initializes all their elements because the initializer is empty.

Are you verifying the contents correctly?

like image 128
Darklighter Avatar answered Sep 25 '22 07:09

Darklighter