は、これを行うには漸近的に良い方法はありません。しかし、あなたはあなたのために仕事をするために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++でタグ付けしました。それは(std::copy
を使用して)あなたがC++を使用している場合、あなたはこのようにそれを書くことができ、言った:
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'を使うことができます。 –
あなたが持っているものは組合ではありません。おそらくあなたはその質問を言い換えるべきでしょうか? –
ああ、2つの配列、つまり 'A'と' B'の両方を含む新しい配列 'U'の和集合を作成しようとしています。 –