1

Hello Dear Community,

I'm working with c++ arrays (static and dynamic ones). My static array A1 has a [30][30] size and my dynamic array A2 is [30*30] long. What I want to do is to copy A1 into A2.

The content of the arrays A1 & A2 is filled with random integer numbers between 0 and 9.

Here is my previous solution approach:(I think so far I made the copy into A2, but I can't figure out, how to return array A2. )

int main() {
    //Array 2-Dimensional
    int A1[30][30] = { 0 };
    int *A2 = new int[30*30];
    int x, j, z;

    for (x = 0; x < 30; x++) {
        for (j = 0; j < 30; j++) {
            A1[x][j] = rand() % 10;
            printf("%d ", A1[x][j]);
            for (z = 0; z < 30 * 30; z++) {
                A2[z] = A1[x][j]; 
            }
        }
        printf("\n");           
    }
    system("Pause");
    return 0;
}
1
  • Remove for loop of z and add z++. Commented Oct 13, 2018 at 1:33

2 Answers 2

1

You don't need three nested loops to make this happen. The trick is to calculate the index of the dynamic array using the two indices of the static array.

Here is a complete example on how to do this in C++ with just two nested loops:

#include <iostream>

const constexpr static int SIZE = 30;

int main() {
    int A1[SIZE][SIZE] = { 0 };
    int *A2 = new int[SIZE * SIZE];

    for (int row = 0; row < SIZE; row++) {
        for (int col = 0; col < SIZE; col++) {
            A1[row][col] = rand() % 10;
            std::cout << A1[row][col] << ' ';

            // calculates the index for A2
            int index = row * SIZE + col;
            A2[index] = A1[row][col];
        }
        std::cout << '\n';
    }

    // A simple loop just to print the contents of A2
    for (int i = 0; i < SIZE * SIZE; i++) {
        std::cout << A2[i] << ' ';
    }

    // don't forget to deallocate A2
    delete[] A2;

    return 0;
}
Sign up to request clarification or add additional context in comments.

1 Comment

Hello HugoTeixeira, that is helpful ! Thank you !!
0

Wait. Which language?? C++?

#include <cstddef>
#include <cstdlib>
#include <ctime>
#include <array>
#include <vector>
#include <algorithm>
#include <iostream>

int main()
{
    constexpr std::size_t num_elements{ 30 };
    constexpr std::size_t max_idx{ num_elements - 1 };

    std::array<std::array<int, num_elements>, num_elements> A1;
    std::vector<int> A2(num_elements * num_elements);

    std::srand(static_cast<unsigned>(std::time(nullptr)));
    std::generate(&A1[0][0], &A1[max_idx][max_idx] + 1, [](){ return rand() % 10; });

    for (auto const &row : A1) {
        for (auto const &col : row)
            std::cout << col << ' ';
        std::cout.put('\n');
    }

    std::copy(&A1[0][0], &A1[max_idx][max_idx] + 1, A2.begin());

    for (auto const &i : A2)
        std::cout << i << ' ';
}

1 Comment

You shouldn't leave those numbers (e.g., 30, 29, etc.) hardcoded everywhere in the code like that. I suggest you to create constexpr constants that would make the code easier to maintain and understand.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.