如何在 C++ 中将值从普通数组存储到二维数组?

How to store values from a normal array to a 2D array in C++?

我想将值存储到 CustomValues 数组。我怎样才能做到这一点? 任何代码和解释都会很棒。

int main() {
    int CustomValues[4][3];

    int Values[3] = {234, 98, 0};
    int Values1[3] = {21, 34, 5};
    int Values2[3] = { 12, 6, 765 };
    int Values3[3] = { 54, 67, 76 };
}

CustomValues 数组应如下所示:

{{234, 98, 0}, { 21, 34, 5 }, { 12, 6, 765 }, { 54, 67, 76 }}

有几种不同的方法可以做到这一点。由于我们已经知道您的约束条件,因此我可以随意不动态地执行此操作。

第一个是memcpy,它在<cstring> header:

memcpy(CustomValues[0], Values, sizeof(Values));
memcpy(CustomValues[1], Values1, sizeof(Values1));
memcpy(CustomValues[2], Values2, sizeof(Values2));
memcpy(CustomValues[3], Values3, sizeof(Values3));

另一种是遍历数组并单独存储值:

for (int i = 0; i < sizeof(CustomValues)/sizeof(CustomValues[0]); i++) {
    for (int j = 0; j < sizeof(CustomValues[0])/sizeof(CustomValues[0][0]); j++) {
        if (i == 0) {
            CustomValues[i][j] = Values[j];
        }
        else if (i == 1) {
            CustomValues[i][j] = Values1[j];
        }
        else if (i == 2) {
            CustomValues[i][j] = Values2[j];
        }
        else if (i == 3) {
            CustomValues[i][j] = Values3[j];
        }
    }
}

可能有更好的方法来处理选择您想要的 Values 数组的逻辑,但这只是一个演示的快速解决方案。

编辑:二维矢量用法示例

此示例不包含实际控制向量中元素数量的逻辑,但您可以按照 for 循环逻辑简单地执行此操作。基本上,您只需要用 size() 检查向量的大小,然后移动到另一个向量。

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<vector<int>> CustomValues; //2D vector

    //1D vectors
    vector<int> Values;
    vector<int> Values1;

    Values.push_back(234); //to insert a value individually
    Values.insert(Values.end(), {98, 0}); //to append multiple values

    Values1.insert(Values1.end(), {21, 34, 5});

    //inserting the 1D arrays to the 2D arrays
    CustomValues.push_back(Values);
    CustomValues.push_back(Values1);

    //example of getting # of elements
    int countOfInnerVectors = 0;
    for (int i = 0; i < CustomValues.size(); i++)
        countOfInnerVectors++;

    cout << "The number of 1D vectors in CustomValues is: " << countOfInnerVectors;
}

检查向量数量是否正确的一个例子是:

//check if we have less than 10 inner vectors
int maxCustomValuesSize = 10;
if (CustomValues2.size() < maxCustomValuesSize)

在这个例子中,你会得到类似 int index = 0 的东西,当 if 不再满足时,你可以执行 index++ 或其他一些逻辑来开始插入新索引,例如 CustomValues2[index].push_back(Values);.

您也可以对内部向量遵循相同的逻辑,您只需更改为新的一维数组,而不是像外部向量那样更改为新的“行”。