Вставить все элементы 2-мерного массива в 1-мерный массив - PullRequest
0 голосов
/ 13 октября 2018

Здравствуйте, уважаемое сообщество,

Я работаю с массивами c ++ (статическими и динамическими).Мой статический массив A1 имеет размер [30] [30], а мой динамический массив A2 имеет длину [30 * 30].Я хочу скопировать A1 в A2.

Содержимое массивов A1 & A2 заполнено случайными целыми числами от 0 до 9.

Вот мой предыдущий подход к решению: (Я думаю, что до сих пор я сделалскопировать в A2, но я не могу понять, как вернуть массив 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;
}

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Подождите.На каком языке??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 << ' ';
}
0 голосов
/ 13 октября 2018

Вам не нужно три вложенных цикла, чтобы это произошло.Хитрость заключается в том, чтобы вычислить индекс динамического массива, используя два индекса статического массива.

Вот полный пример того, как сделать это в C ++ с помощью всего двух вложенных циклов:

#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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...