Как мне добавить 10 массивов, чтобы сформировать единый массив в c ?

#c #c 11

#c #c 11

Вопрос:

Допустим, у меня есть эти 10 ранее объявленных массивов в моем коде.

   int arr1[] = {1,2,3,4,5,6,7,8,9,10};
  int arr2[] = {1,2,3,4,5,6,7,8,9,10};
  int arr3[] = {1,2,3,4,5,6,7,8,9,10};
  int arr4[] = {1,2,3,4,5,6,7,8,9,10};
  int arr5[] = {1,2,3,4,5,6,7,8,9,10};
  int arr6[] = {1,2,3,4,5,6,7,8,9,10};
  int arr7[] = {1,2,3,4,5,6,7,8,9,10};
  int arr8[] = {1,2,3,4,5,6,7,8,9,10};
  int arr9[] = {1,2,3,4,5,6,7,8,9,10};
  int arr10[] = {1,2,3,4,5,6,7,8,9,10};
  

В принципе, я хочу добавить все 10 этих массивов один за другим, чтобы создать один массив.

  ArrayOfArrays = { arr1[], arr2[], arr3[], arr4[], arr5[], arr6[], arr7[], arr8[], arr9[], arr10[] }
  

Как бы я это сделал? Для некоторых этот вопрос может показаться тривиальным, но я новичок в C и не могу понять, как это сделать. Пожалуйста, помогите и заранее спасибо.

Комментарии:

1. Что вы подразумеваете под добавлением всех 10 этих массивов в один массив ? например [A] [B] ... [J] = [Z] или [Z] = [[A][B]...[J]]

2. Вот так: ArrayOfArrays = { arr1[], arr2[], arr3 [], arr4 [], arr5 [], arr6[], arr7 [], arr8 [], arr9 [], arr10 [] }

3. Итак, вы хотите создать матрицу?

4. Есть ли ограничение при использовании массивов? Размеры всех массивов предварительно определены / preknown? если нет, то вы можете использовать связанный список. в противном случае, если все заранее определено, то просто объявить результирующий массив и заполнить его

5. Да, размеры предопределены. Как бы я объявил результирующий массив и заполнил его?

Ответ №1:

В принципе, я хочу добавить все 10 этих массивов один за другим, чтобы создать один массив.

Вы не можете этого сделать.

Ближе всего к этому можно подойти с помощью std::array .

 std::array<int, 10> arr1 = {1,2,3,4,5,6,7,8,9,10};
...
std::array<int, 10> arr10 = {1,2,3,4,5,6,7,8,9,10};

std::array<std::array<int, 10>, 10> arrayOfArray = {arr1, ..., arr10};
  

Ответ №2:

Попробуйте этот подход:

 #include <iostream>
#include <vector>

int arr1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int arr2[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//  ...other arrays here...

// We pass a reference to a vector and return the same vector for performance reasons.
// Compiler often can optimize that into a better code.
std::vector<int> append(std::vector<int> amp; vec, int * data, int size)
{
    for (int i = 0; i < size;   i)
        vec.push_back(data[i]);
    return vec;
}

int main()
{
    std::vector<int> data;

    data = append(data, arr1, 10);
    data = append(data, arr2, 10);

    for (auto i : data)
        std::cout << i << ", ";
    std::cout << std::endl;
    return 0;
}
  

Кроме того, в C есть хорошие контейнеры для хранения массивов, попробуйте выполнить поиск по std::array и std::vector containers. Первый — статический массив фиксированного размера, другой — динамический.

Ответ №3:

Я хочу добавить все 10 этих массивов один за другим, чтобы создать один массив?

У вас может быть массив указателей, например

 int *ArrayOfPointers[10] = { amp;arr1, amp;arr2, amp;arr3, amp;arr4, amp;arr5, amp;arr6, amp;arr7, amp;arr8, amp;arr9, amp;arr10};
  

Вот ArrayOfPointers массив 10 указателей int, т. Е. он может хранить адрес 10 массива int одного измерения, такого как arr1 , arr2 и т.д.

Я предполагаю, что может быть лучший метод, чем тот, который я предлагаю заранее C для той же задачи.

Ответ №4:

В C нет необходимости и опрометчиво использовать массивы в стиле C. Для массивов постоянного размера вы можете использовать std::array , а для массивов переменного размера, std::vector

Похоже, что на самом деле вам нужна постоянная двумерная матрица и возможность доступа к каждой из ее строк как к постоянному массиву, но вы не знаете, как инициализировать двумерную матрицу. Если это так, вот как:

 #include <iostream>
#include <array>

std::array<std::array<int,10>,10> matrix = {{
    {{1,2,3,4,5,6,7,8,9,10}},
    {{1,2,3,4,5,6,7,8,9,10}},
    {{1,2,3,4,5,6,7,8,9,10}},
    {{1,2,3,4,5,6,7,8,9,10}},
    {{1,2,3,4,5,6,7,8,9,10}},
    {{1,2,3,4,5,6,7,8,9,10}},
    {{1,2,3,4,5,6,7,8,9,10}},
    {{1,2,3,4,5,6,7,8,9,10}},
    {{1,2,3,4,5,6,7,8,9,10}},
    {{1,2,3,4,5,6,7,8,9,10}}
}};

int main()
{
    std::array<int,10> const amp; arr0 = matrix[0];
    for (int const amp; i : arr0) {
        std::cout << i << ' ';
    }
    std::cout << std::endl;

    // Or more simply...
    auto const amp; arr5 = matrix[5];
    for (auto const amp; i : arr5) {
        std::cout << i << ' ';
    }
    std::cout << std::endl;
}
  

Скомпилируйте, свяжите и запустите:

 $ g   -Wall -Wextra main.cpp amp;amp; ./a.out
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
  

живая демонстрация