gpt4 book ai didi

c++ - 在 (C/C++) 中将一维数组指定为二维(多)维数组的元素

转载 作者:搜寻专家 更新时间:2023-10-31 00:30:22 24 4
gpt4 key购买 nike

请先为我的英语道歉。让我们分别定义一维和二维(多)维数组,如下所示:

typedef float VERTREX[3];
typedef VERTREX TRIANGLE[3];

然后说我已经初始化了一些 VERTEX 数组,

VERTREX v1 = { 1, 2, 3 };
VERTREX v2 = { 2, 2, 3 };
VERTREX v3 = { 1, 2, 1 };

在数学上假设一个由三个顶点组合定义的三角形,因此我定义了一个三角形,如下代码片段,

TRIANGLE tr;

当我要将每个VERTEX(单维数组)元素分配给TRIANGLE(数组数组/二维数组)时出现问题,如下代码所示,

tr[0] = v1; // error C2106: '=' : left operand must be l-value(in Visual C++ compiler)
tr[1] = v2; // error C2106:
tr[2] = v3; // error C2106:

我也不能继续创建三角形数组。

TRIANGLE tr[4]; // creating array of Triangles

因此可以预期相同的行为。如果有人有想法/解决方案如何将单维数组分配为二维(多)维数组的元素,请回复。请不要使用标准容器(如 std::vector 或使用原始指针方法)提供解决方案。请绑定(bind)数组概念。谢谢大家的聆听。请提供干净的答案。

最佳答案

typedef 是别名。它们不定义新类型。

TRIANGLE tr;
tr[0] = v1;

类似于:

VERTEX temp;
temp = v1;

如果您删除 typedef 并使用实际类型,则相当于:

float v1[3] = { 1, 2, 3 };
float temp[3];
temp = v1;

这在 C/C++ 中是不允许的。你不能分配给这样的数组。

您需要一个一个地复制元素,或者使用memcpy

for (int i = 0; i < 3; ++i )
tr[0][i] = v1[i];

memcpy(tr[0], v1, sizeof(v1));

当您使用 TRIANGLE 数组时,您必须使用类似的策略将 TRIANGLE 复制到数组的元素。


由于这些大小是在编译时定义的,我强烈建议使用 std::array

这是一个简单的程序:

#include <iostream>
#include <array>

using VERTEX = std::array<float, 3>;
using TRIANGLE = std::array<VERTEX, 3>;

int main()
{
VERTEX v1 = { 1, 2, 3 };
VERTEX v2 = { 2, 2, 3 };
VERTEX v3 = { 1, 2, 1 };

TRIANGLE tr;
tr[0] = v1;

TRIANGLE trArray[4];
trArray[0] = tr;

std::cout << v1[0] << " " << v1[1] << " " << v1[2] << std::endl;
}

这是输出:

1 2 3 

关于c++ - 在 (C/C++) 中将一维数组指定为二维(多)维数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37337801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com