Существует не асимптотический лучший способ сделать это, потому что вы должны скопировать каждый элемент ровно один раз. Тем не менее, вы могли бы сделать лучше с помощью операции массового копирования, как memcpy
сделать работу за вас:
double *A = (double *)malloc(n*n *sizeof(double));
double *B = (double *)malloc( n *sizeof(double));
double *U = (double *)malloc((n*n+n) *sizeof(double));
/* Copy over A onto U. */
memcpy(U, A, n * n * sizeof(double));
/* Append B to U. */
memcpy((char*)U + n * n * sizeof(double), B, n * sizeof(double));
Это может быть быстрее, так как логика, чтобы скопировать байты через может быть вручную оптимизированы.
Вы отметили этот вопрос на C++, хотя он больше похож на код C. Тем не менее, если вы используете C++, вы могли бы написать это (используя std::copy
):
double *A = new double[n * n];
double *B = new double[n];
double *U = new double[n * n + n];
std::copy(A, A + n * n, U);
std::copy(B, B + n, U + n * n);
Или, еще лучше, используя std::vector
с открытыми участками управления памятью или указатели:
vector<double> A(n * n);
vector<double> B(n);
vector<double> U;
U.reserve(A.size() + B.size());
U.insert(U.end(), A.begin(), A.end());
U.insert(U.end(), B.begin(), B.end());
Надежда это помогает!
Ну, вы всегда можете использовать 'memcpy'. –
У вас там нет союза. Возможно, вы должны перефразировать вопрос? –
А, я вижу, вы пытаетесь создать объединение двух массивов, новый массив 'U', который содержит как' A', так и 'B'. –