#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