C ++连接两个数组而不进行深度复制

问题描述

我有两个大小各为3的数组:

void main() {
    double* arr1 = new double[3];
    double* arr2 = new double[3];
    for(int i = 0; i < 3; i++) {
        arr1[i] = 0;
        arr2[i] = 0;
    }
}

我有一个函数,它使用一个双精度数组作为指针:

void func(double* arr_6D) {
   // expected arr size = 6.
   // manipulates values of arr
   for(int i = 0; i < 6; i++) {
      arr_6D[i] = 1;
   }
}

我想将arr1和arr2一起传递给函数,以便它们的 原始 值由函数操纵。

我该怎么做?

以下内容将无法使用,因为它正在复制原始数组:

double *arr_merged = new double[6];
arr_merged[0] = arr1[0];
arr_merged[1] = arr1[1];
arr_merged[2] = arr1[2];
arr_merged[3] = arr2[0];
arr_merged[4] = arr2[1];
arr_merged[5] = arr2[2];
func(arr_merged);

解决方法

您无法修改使用new double[<size>]创建的数组的大小以能够进行合并,因此无法使用std::vector<float>修改大小,还提供许多其他行为

'func(double * arr_6D)来自库并已修复。我无法将其更改为例如func(std :: vector&arr_6d)

您可以使用操作data()

获得用作元素存储的基础数组
std::vector<double> arr1 = { ... }
...
std::vector<double> arr2 = { ... }
...
// concatenate arr1 with arr2
arr1.insert( arr1.end(),arr2.begin(),arr2.end() );
...
// call your func with underlying array
func(arr1.data());

警告在操作基础数组时要小心