首页 > 解决方案 > 如何通过 C++ 将一个数组重新制作成两个更小的数组?

问题描述

我需要从一个 10 元素数组中创建两个 5 元素数组。我做了这样的代码

#include <iostream>
using namespace std;

int main() {
    const int size1 = 10, size2 = 5;

    int array[size1]{ 1,3,6,2,82,10,6,34,2,5 }, arb[size2]{}, arc[size2]{};

    for (size_t i = 0; i < 5; i++)
    {
        arb[i] = array[i];
    }
    for (size_t i = 5; i < 9; i++) {
        
        for (size_t e = 0; e < 4; e++)
        {
            arc[e] = array[i];
        }
        
    }

    for (size_t i = 0; i < 5; i++)
    {
        cout << arb[i] << "\t";
    }
    cout << endl;

    for (size_t i = 0; i < 5; i++)
    {
        cout << arc[i] << "\t";
    }
}

但第二个数组给出“2 2 2 2 0”。我不知道如何解决这个问题。

标签: c++arraysalgorithmcopy

解决方案


除非您有特定的理由认为这些必须是数组(这非常罕见,至少在我的经验中是这样),否则我会使用std::vectors 来代替。这使得用较大的正确部分初始化较小的“数组”变得微不足道:

std::vector<int> array { 1,3,6,2,82,10,6,34,2,5 };
std::vector<int> arb { array.begin(), array.begin() + size2};
std::vector<int> arc { array.begin() + size2, array.end() };

这也使得(例如)将主数组分成两半变得容易,而不管它的确切大小:

std::vector<int> array { 1,3,6,2,82,10,6,34,2,5, 12, 17, 92, 101, -3 };
auto half = array.size() / 2;
std::vector<int> arb { array.begin(), array.begin() + half};
std::vector<int> arc { array.begin() + half, array.end() };

[就目前而言,如果主数组有奇数个元素,这将使后半部分更大,但如果这不是您想要的,您可以更改计算half以满足您的需要。]


推荐阅读