1

Тема: Два мисиви в один

Прошу допомогти з кодом і прокритикувати (по можливості вказати на правильний код) Дякую
Є три масиви:

        int arr1[5];
    int arr2[5];
    int arr3[10];

У третій масив ввести дані з першого та другого

for (int i = 0; i < 5; i++)
    {
        arr3[i] = arr1[i]; // масив arr3 складається з 10 елементів і тут він заповнюється п’ятьма елементами з масиву arr1
    }

for (int i = 5; i < 10; i++)
    {
        arr3[i] = arr2[i - 5]; // а тут масив arr3 заповнюється (починаючи з 5-го елементу) елементами масиву arr2
    }

Ось так

2 Востаннє редагувалося koala (19.01.2016 13:52:46)

Re: Два мисиви в один

Абсолютно нормальний код, якщо STL не використовувати. З STL буде

std::copy( arr1, arr1+ 5, arr3   );
std::copy( arr2, arr2+10, arr3+5 );

if в циклі буде гіршим за цей код.
Ще можна з векторами погратися:

std::vector<int> arr1(5), arr2(5), arr3;
arr3.insert( arr3.end(), arr1.begin(), arr1.end() );
arr3.insert( arr3.end(), arr2.begin(), arr2.end() );

Ну і відступи треба якось внормувати - фігурна дужка сама не додає окремого рівня виконання, тому не потребує відступів до (чи після) себе.

for(...)
{
    ...
}

або навіть

for(...) {
    ...
}
Подякували: Roman_ko, leofun012

3

Re: Два мисиви в один

koala, ще велике прохання до Вас або написати, або дати посилання на елементарні приклади з векторами, бо я з ними ще не вмію працювати. Дякую.

4

Re: Два мисиви в один

Вікі читати не пробували?
А взагалі бажано вам якийсь підручник купити, інакше важко буде. Хоча б того ж Лафоре, чи, якщо вже щось розумієте в C, Страуструпа.

5

Re: Два мисиви в один

можна трохи зменшити запис


    int arr1[5];
    int arr2[5];
    int arr3[10];
        ...
for (int i = 0; i < 5; i++)
    {
        arr3[i] = arr1[i];
        arr3[i+5] = arr2[i]
    }
        ...

6

Re: Два мисиви в один

Це якщо припустити, що масиви будуть однакового розміру завжди. З умови такий зв'язок не випливає. От якби було

const int part_size = 5;
int arr1[ part_size ];
int arr2[ part_size ];
int arr3[ 2 * part_size ];

Тоді це б згодилося. Але тут може виявитися, що другий масив потім збільшать до 10 елементів, а третій до 15 - і все.

7

Re: Два мисиви в один

можна трохи зменшити запис

А можна й ще:

int arr1[5];
    int arr2[5];
    int arr3[10];
...
memcpy(&arr3[0],&arr1[0],sizeof(arr1));
memcpy(&arr3[sizeof(arr1)/sizeof(int)],&arr2[0],sizeof(arr2));

8)

8

Re: Два мисиви в один

koala, для масивів кількість елементів яких >= 0 (чи може я щось не врахував?)

#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Ukrainian");
    int n,m;
        cin >> n; // розмір першого масиву
        cin >> m; // розмір другого масиву

    int *arr1 = new int[n];
    int *arr2 = new int[m];
    int *arr3 = new int[n+m];
    for(int i(0);i<n;i++)
        cin >> arr1[i]; // перший масив

    for(int i(0);i<m;i++)
        cin >> arr2[i]; // другий масив

    for(int i(0);i<(n+m);i++)
    {
        i<n?(arr3[i] = arr1[i]):(arr3[i] = arr2[i-n]);
    }
    for(int i(0);i<(n+m);i++)
        cout << "arr3[" << i+1 <<"]= " << arr3[i] << endl; // виводимо склеїний масив


    delete []arr1;
    delete []arr2;
    delete []arr3;
    return 0;
}