gpt4 book ai didi

c++ - 如何将结构数据成员传递给函数

转载 作者:行者123 更新时间:2023-11-27 23:44:32 24 4
gpt4 key购买 nike

我希望能够将结构成员传递给函数:

struct threeBuckets {
int bucketA;
int bucketB;
int bucketC;
};

threeBuckets allCombinations[512000] = {{0,0,0}};
int totalCombinations = 1;
int counter = 0;


//note that pourer, receiver, and other are one of the struct members (bucketA, bucketB, and bucketC)

void pour(pourer, receiver, int receiverCap, other) {
int finalTriple[3];
allCombinations[totalCombinations].bucketA = allCombinations[counter].bucketA;
allCombinations[totalCombinations].bucketB = allCombinations[counter].bucketB;
allCombinations[totalCombinations].bucketC = allCombinations[counter].bucketC;
allCombinations[totalCombinations].receiver = allCombinations[totalCombinations].receiver + allCombinations[counter].pourer;
allCombinations[totalCombinations].pourer = 0;
if (allCombinations[totalCombinations].receiver > receiverCap) {
allCombinations[totalCombinations].pourer = allCombinations[totalCombinations].pourer + allCombinations[totalCombinations].receiver - receiverCap;
allCombinations[totalCombinations].receiver = receiverCap;
}
finalTriple[0] = allCombinations[totalCombinations].bucketA;
finalTriple[1] = allCombinations[totalCombinations].bucketB;
finalTriple[2] = allCombinations[totalCombinations].bucketC;
//some more irrelevant code
}

正如我希望阐明的那样,参数 pourer、receiver 和其他参数是 bucketA、bucketB 和 bucketC(没有特定的顺序,顺序确实会根据我调用函数的时间而改变。)有几个地方我要修改实例

allCombinations[totalCombinations].pourer

例如。如何使用结构成员作为参数,使用什么类型来指定它?

注意:我主要是初学者并且是 StackOverflow 的新手,所以如果我做的其他任何事情是错误的,请随时告诉我。

注意 2:如果你们中有人做过或做过 USACO,您可能会将此问题识别为 milk3 培训网关问题。如果您不知道我在这里做什么,这可能会对您有所帮助。

最佳答案

听起来您需要为 pour 中的参数类型使用指向成员变量的指针。

void pour(double threeBuckets::(*pourer) ,
double threeBuckets::(*receiver),
int receiverCap,
double threeBuckets::(*other)) {
...
}

在函数中,改变使用

allCombinations[totalCombinations].pourer
allCombinations[totalCombinations].receiver
allCombinations[totalCombinations].other

allCombinations[totalCombinations].*pourer
allCombinations[totalCombinations].*receiver
allCombinations[totalCombinations].*other

分别。

在调用函数时,使用:

pour(&threeBuckets::bucketA,
&threeBuckets::bucketB,
0, // Any appropriate value
&threeBuckets::bucketC);

另一个值得考虑的选项是:

  1. 更改 threeBuckets 以使用数组。
  2. pour 的参数更改为数组的索引。


struct threeBuckets {
int buckets[3];
};

void pour(int pourerIndex ,
int receiverIndex,
int receiverCap,
int otherIndex)) {
...
}

然后,而不是使用

allCombinations[totalCombinations].pourer
allCombinations[totalCombinations].receiver
allCombinations[totalCombinations].other

使用

allCombinations[totalCombinations].buckets[pourerIndex]
allCombinations[totalCombinations].buckets[receiverIndex]
allCombinations[totalCombinations].buckets[otherIndex]

当然,改调用使用索引。

pour(0,
1
0, // Any appropriate value
2);

关于c++ - 如何将结构数据成员传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51713070/

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