如何在 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);
.
您也可以对内部向量遵循相同的逻辑,您只需更改为新的一维数组,而不是像外部向量那样更改为新的“行”。
我想将值存储到 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);
.
您也可以对内部向量遵循相同的逻辑,您只需更改为新的一维数组,而不是像外部向量那样更改为新的“行”。