gpt4 book ai didi

c# - 在没有大量新调用的情况下转换结构的 C++ 数组?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:00:07 26 4
gpt4 key购买 nike

C++

typedef struct someStruct {
int val1, val2;
double val3;
} someStruct;

someStruct a [1000] = { {0, 0, 0.0}, {1, 1, 1.0}, ... };

我所知道的在 C# 中初始化这样一个表的唯一方法是编写类似的东西

class SomeStruct 
{
int val1, val2;
double val3;

public SomeStruct (int val1, int val2, double val3)
{
this.val1 = val1;
this.val2 = val2;
this.val3 = val3;
}
}

SomeStruct[] a = new SomeStruct [1000]
{
new SomeStruct (0, 0, 0.0),
new SomeStruct (1, 1, 1.0),
...
};

有没有办法让一个(引用)类 SomeClass 类型的值数组而不是指向那些值的指针?

编辑:

重点是我想避免为数组中的每个结构调用 new。所以我想要的是一个包含 1000 个结构而不是 1000 个指向 (1000) 结构的指针的数组。我问的原因是 C# 处理这个问题的方式对我来说似乎非常低效,涉及大量内存和内存管理开销(例如 C++)。

我试过类似的东西

struct SomeStruct {
int a, b;
double c;
}

SomeStruct[] a = new SomeStruct [1000] { {0,0,0.0}, {1,1,1.0}, ... };

但那是不可能的。因此,尽管我知道结构是值类型,但我得出的结论是,只有将它们作为参数传递给函数时才是正确的,而且我不得不使用 new,就像这样(在这里使用结构):

struct SomeStruct {
int a, b;
double c;
SomeStruct (int a, int b, double c) {
this.a = a; this.b = b; this.c = c;
}
}

SomeStruct[] a = new SomeStruct [1000] {
new SomeStruct {0,0,0.0},
new SomeStruct {1,1,1.0},
...
};

最佳答案

您可以在 C# 中使用 struct 关键字。 C# 结构是值类型 - 结构数组是连续存储的结构,与 C++ 标准数组相同。

关于c# - 在没有大量新调用的情况下转换结构的 C++ 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3618560/

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