1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
//clang Склейка одномерных массивов Листинг #1 #include <iostream> using std::cout; using std::cin; int main () { const int N1 = 5; //число элементов в одном массиве const int N2 = 6; //число элементов во втором массиве int arr1[N1] = {1,2,3,4,5}; int arr2[N2] = {100,101,102,103,104,105}; /*Для склейки нужен новый массив*/ const size_t N3 = N1 + N2; //Размер третьего массива лучше вычислить сразу size_t arr3[N3]; /*Заполнение массива происходит путём обычного обхода двух массивов по очереди и вытаскиванием из них элементов с записыванием в третий */ for (size_t i = 0; i<N3; i++){ if (i<N1){ arr3[i] = arr1[i]; } else { arr3[i] = arr2[i - N1]; //Индекс немного сбит, возвращаем его на свою позицию } } /*КОНЕЦ ЗАПОЛНЕНИЯ МАССИВА*/ cout << "result: "; for (size_t i = 0; i < N3; i++){ cout << arr3[i] << ' '; } cout << '\n'; cin.get(); } |
1 |
arr3[i] = i<N1 ? arr1[i] : arr2[i-N1]; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
//clang Склейка одномерных массивов Листинг #3 #include <iostream> using namespace std; int main () { const int N1 = 5; //число элементов в одном массиве const int N2 = 6; //число элементов во втором массиве int arr1[N1] = {1,2,3,4,5}; int arr2[N2] = {100,101,102,103,104,105}; /*Для склейки нужен новый массив*/ const size_t N3 = N1 + N2; //Размер третьего массива лучше вычислить сразу size_t arr3[N3]; /*Заполнение массива происходит путём обычного обхода двух массивов по очереди и вытаскиванием из них элементов с записыванием в третий */ for (unsigned i = 0u; i<N3; i++){ arr3[i] = i<N1 ? arr1[i] : arr2[i - N1]; //Использовали тернарную операцию } /*КОНЕЦ ЗАПОЛНЕНИЯ МАССИВА*/ cout << "result: "; for (size_t i = 0; i < N3; i++){ cout << arr3[i] << ' '; } cout << '\n'; cin.get(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
//clang Склейка одномерных массивов с помощью memmove Листинг #4 #include <iostream> #include <string.h> //Для memmove using namespace std; int main () { const int N1 = 5; //число элементов в одном массиве const int N2 = 6; //число элементов во втором массиве int arr1[N1] = {1,2,3,4,5}; int arr2[N2] = {100,101,102,103,104,105}; /*Для склейки нужен новый массив*/ size_t N3 = N1 + N2; //Размер третьего массива лучше вычислить сразу size_t arr3[N3]; /*Заполнение массива происходит путём обычного обхода двух массивов поочереди и вытаскиванием из них элементов с записыванием в третий */ memmove(arr3 + 0, arr1, N1 * sizeof(*arr1)); memmove(arr3 + N1, arr2, N2 * sizeof(*arr2)); /*КОНЕЦ ЗАПОЛНЕНИЯ МАССИВА*/ cout << "result: "; for (size_t i = 0; i < N3; i++){ cout << arr3[i] << ' '; } cout << '\n'; cin.get(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
//clang Склевание двух одномерных массивов #include <iostream> struct array_concat{ int *arr; int N; }; int main () { int N1 = 3; int N2 = 5; int *ptr1 = new int[N1]; int *ptr2 = new int[N2]; for (int i=0; i<N1; i++) ptr1[i] = i+1; //Заполнение первого массива for (int i=0; i<N2; i++) ptr2[i] = i+101; //Заполнение второго массива array_concat ptr[2] = { {ptr1, N1}, {ptr2, N2} }; //Дополнительная память не выделяется /*Обходим созданное творение*/ for (int i=0; i<2;i++){ for (int j=0; j < ptr[i].N; j++){ std::cout << ptr[i].arr[j] << '\n'; } } delete[] ptr1; delete[] ptr2; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//clang Склейка массивов с помощью алгоритма insert #include <vector> #include <algorithm> #include <iostream> using namespace std; int main () { vector<int> v1 = {1,2,3,4,5}; vector<int> v2 = {100,101,102,103,104,105,106}; v1.insert(v1.end(),v2.begin(),v2.end()); for (const auto &i:v1) cout << i << '\n'; //Обход вектора } |
говно