首页 > 解决方案 > C ++将大数组拆分/分区为较小的数组

问题描述

这将是我对 StackOverflow 的第一个问题。我想解决的问题是如何将一个充满机智值的大数组拆分为较小的数组。这甚至是这样做的好方法吗?

该数组有 10000 个元素,我想将其拆分为 8 个较小的元素。

下面的一些代码:我如何生成数组

double* GenerateRandomArray(UI nSize){
    double* rndArr=nullptr;
    rndArr = new double [baseArrSize];
    double randVal=0.0;
    std::uniform_real_distribution<double> unif(low_val, high_val);
    std::default_random_engine rndEng;
    for(int i=0; i<baseArrSize; ++i){
        randVal = unif(rndEng);
        rndArr[i] = randVal;
    }

    delete [] rndArr;

}

现在我的第二个函数应该将此数组拆分/分区为较小的数组,或者我应该创建额外的 8 个函数,将基本数组的适当部分复制到它们的子数组中?

关于我如何捕获数组第一部分的一些代码:

double* PartitionArray1(double* rootArr){
    rootArr = new double [baseArrSize];
    const UI splitVal = baseArrSize/8;
    double* arr0=nullptr;

    arr0 = new double[splitVal];
    for(UI i=0; i<splitVal; i++){
            arr0[i] = rootArr[i];
    }
    for(UI j=0; j<splitVal; ++j)
        std::cout << arr0[j] << " ";
    return arr0;

}

这似乎有效 - 检查 arr0 它有来自基本数组的 1250 个元素。

我对此有两个问题:

  1. 在接下来的步骤中如何做到这一点?即我有创建第二个子数组的功能,不知道如何开始将参数从基本数组的某个点传递到另一个。

    arr1 = 新双 [splitVal]; for(UI i=0; 我

  2. 这甚至是一种有效的方法吗?也许生成一个大向量然后将其拆分为数组会更好?

谢谢

标签: c++arrays

解决方案


非常感谢您的评论。我这样做的方式与建议的方式有点不同:

double* SplitFirstArray_1st(double *arr0){
            const UI arrSize = baseElements/4;
    std::cout << "\n1st split: \n";
    double *arrSplited1=nullptr;
    arrSplited1 = new double [arrSize];
    for(UI i=0; i<arrSize; i++){
        arrSplited1 = arr0;
    }

    for(UI j=0; j< arrSize; ++j){
        std::cout << arrSplited1[j] << " ";
        }
    return arrSplited1;
    delete [] arrSplited1, arr0;

}

类似的方式在下一个函数中完成,即

double* SplitThirdArray_3rd(double *arr0){
    const UI arrSize = baseElements/4;
    std::cout << "\n3rd split: \n";
    double *arrSplited3=nullptr;
    arrSplited3 = new double [arrSize];
    double *arr3splitedStart = &arr0[arrSize+25];
    for(UI i=0; i<arrSize; i++){
        arrSplited3 = arr3splitedStart;
    }
    for(UI j=0; j< arrSize; ++j){
        std::cout << arrSplited3[j] << " ";
    }
    return arrSplited3;
    delete [] arr3splitedStart, arrSplited3;

}

这肯定不是最理想的方法,可以使用模板函数来处理。我会在这方面做更多的工作。

这怎么可能更优化?


推荐阅读