gpt4 book ai didi

c++ - 如何使用整数参数访问结构列表 (c++)?

转载 作者:行者123 更新时间:2023-11-28 05:54:55 26 4
gpt4 key购买 nike

我有一系列结构:

const struct weapon Dagger = { 1, 40, 5, 20, 30, "Dagger" };
const struct weapon Sword = { 2, 35, 25, 40, 60, "Sword" };
const struct weapon Axe = { 4, 50, 10, 70, 80, "Axe" };
const struct ...

我想对它们进行排列,以便我可以按整数访问每一个。我正在尝试构建一个函数,该函数将 int xint y 作为参数,并返回索引结构的数据。例如,如果函数分别采用 23,则 weapon 结构中的值 35 将是回。直觉上,我想象函数体看起来像 return weapon[x].y,尽管这不起作用。

我不知道该怎么做。我能看到的最好的选择是使用数组而不是结构。我应该改为这样做吗?

最佳答案

如果您只需要数字数据,那么您可以使用两个数组:一个用于数据本身,一个用于访问函数指针:

struct weapon
{
int val;
int hp;
int foo;
// ...
std::string name;
};

const weapon w[] = {
{ 1, 40, 5, 20, 30, "Dagger" },
{ 2, 35, 25, 40, 60, "Sword" },
{ 4, 50, 10, 70, 80, "Axe" },
};

using accessor = int weapon::*;
const accessor acc[] = {
&weapon::val,
&weapon::hp,
&weapon::foo,
// ...
};

现在要查找武器 i 中的属性 j(均为零索引),您可以说:

w[i].*acc[j]

或者,您可以将数据表示为一对数组:

std::pair<const char*, std::array<int, 5>> w_alt[] = {
{ "Dagger", { 1, 40, 5, 20, 30 } },
{ "Sword", { 2, 35, 25, 40, 60 } },
{ "Axe", { 4, 50, 10, 70, 80 } },
};

现在第 i 武器的属性是 w_alt[i].first,它的第 j 属性是 w_alt[i .second[j].

关于c++ - 如何使用整数参数访问结构列表 (c++)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34386668/

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