Индексы массива в C ++ начинаются с 0.
Также этот оператор
cout << arr3[10] << endl;
не выводит массив. Он пытается вывести несуществующий элемент с индексом массива 10.
И l oop недопустим, потому что он пытается получить доступ к памяти за пределами массивов arr1 и arr2.
Ваш Программа может выглядеть следующим образом.
#include <iostream>
using namespace std;
int main()
{
const size_t N = 5;
int arr1[N] = { 1,3,5,7,9 }, arr2[N] = { 0,2,4,6,8 }, arr3[2 * N];
for ( size_t i = 0, j = 0, k = 0; i < 2 * N; i++)
{
if ( arr2[k] < arr1[j])
arr3[i] = arr2[k++];
else
arr3[i] = arr1[j++];
}
for ( const auto &item : arr3 ) cout << item << ' ';
cout << '\n';
return 0;
}
Та же задача может быть выполнена с использованием стандартного алгоритма std::merge
, объявленного в заголовке <algorithm>
.
Например
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
int a1[] = { 1, 3, 5, 7, 9 };
int a2[] = { 0, 2, 4, 6, 8 };
int a3[sizeof( a1 ) / sizeof( *a1 ) + sizeof( a2 ) / sizeof( *a2 )];
std::merge( std::begin( a1 ), std::end( a1 ),
std::begin( a2 ), std::end( a2 ),
std::begin( a3 ) );
for ( const auto &item : a3 ) std::cout << item << ' ';
std::cout << '\n';
return 0;
}
Вывод программы такой же, как показано выше.
0 1 2 3 4 5 6 7 8 9