Другие языки программирования и технологии

Как вставить один массив в другой C, C++

даны два массива различной длины. Вставить второй массив между к-тым и (к+1)-ым элементами первого массива, не используя дополнительного массива.
Alexander Otmahov
Alexander Otmahov
348
Вставляем массив b длинной n в массив a, занятая часть которого имеет длину m. При этом общая длина массива a должны быть не меньше n + m (например, для увеличения длины массива можно использовать realloc).

// Сначала перемещаем хвост массива a
for (i = m - 1; i > k; --i) { a[i + n] = a[i]; }
// Потом вставляем массив b
for (i = 0; i < n; --i) { a[i + k + 1] = b[i]; }
Tim Battalov
Tim Battalov
50 865
Лучший ответ
нужна библиотека иострим и алгоритм

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

int iArray_01[5]{1,2,3,4,5};
int iArray_02[9]{11,22,33,44,55,66,77,88,99};

copy(iArray_01, iArray_01 + 4, iArray_02 + 1);

for(unsigned int ui : iArray_02)
{
cout << ui << " " << flush;
}

return a.exec();
}
Andrey Tseva
Andrey Tseva
10 755
#include <iostream>
#include <windows.h>
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <ctime>

using namespace std;

template<class T>
void Show(const T &);

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
srand(time(0));
system("color 0A");

cout << "Введите длины массивов через пробел ";
size_t n1, n2;
cin >> n1 >> n2;
vector<int> v1(n1);
vector<int> v2(n2);
auto gen = []()
{
return -10 + rand() % 21;
};
generate(v1.begin(), v1.end(), gen);
generate(v2.begin(), v2.end(), gen);
cout << "Содержание 1 массива" << endl;
Show(v1);
cout << "Содержание 2 массива" << endl;
Show(v2);
cout << "Укажите индекс элемента (счёт от нуля) первого массива, после которого разместить второй массив ";
size_t ind;
cin >> ind;
size_t delta = 0;
for (const auto &t : v2)
{
v1.insert(v1.begin() + ind + ++delta, t);
}
cout << "Содержание слитого массива" << endl;
Show(v1);

system("pause");
return 0;
}

template<class T>
void Show(const T &v)
{
for (const auto &t : v)
{
cout << t << " ";
}
cout << endl;
}