我有一个结构定义为
typedef struct _ans{
int **a;
int *b; double*c; int *d, int *e, float *f, double *g;} ans;
ans *temp;
“a”是一个二维数组,对于这个数组中的每一行,让第 i 行,我将在 vector “b、c 和 d”的第 i 个元素中定义一个对应的值, ETC”。
我想创建一个函数“func”来修改数组“a”中的第 i 行;显然,每当“a”中的第 i 行被修改时,它在 vector “b、c 和 d 等”中的相应值也应该重新计算。
我有两种可能:
1-定义函数为
func(temp->a[i], temp->b[i], temp->c[i], temp->d[i], temp->e[i], temp->f[i],temp->g[i])
有许多输入参数,但都与第 i 行有关。 或者 2- 只需将“temp”作为 func 的唯一输入参数传递:
func(temp)
然后在函数内部,我可以轻松访问第 i 行及其在其他 vector b、c 等中的对应值。
我想知道就代码效率和计算时间而言,这两种情况中哪一种更有效。
感谢任何建议
最佳答案
当然,以下所有内容都是概括性的。到目前为止,您做出的选择可能有充分的理由,但在我看来它们是错误的。
您的设计是错误的,您对节省计算时间的关注是错误的。软件中最大的成本是人力成本。首要任务始终是使您的代码尽可能简单明了且易于理解。
你的数据结构有两个明显的缺陷,过度使用指针和相关项分组不足(换句话说,并行数组)。这样会更好
struct Row
{
std::vector<int> a;
int b;
double c;
int d;
int e;
float f;
double g;
};
struct Ans
{
std::vector<Row> a;
};
Ans temp;
通过这次重新设计,您的 func
函数的正确位置变得显而易见。它应该是 Row
结构的一种方法,它可以在其中访问所需的所有数据。
struct Row
{
void func();
std::vector<int> a;
int b;
double c;
int d;
int e;
float f;
double g;
};
虽然设计有所改进,但此解决方案等同于您的第二种选择。
您还应该努力将结构中的数据设为私有(private)。
关于c++ - 如何以有效的方式将输入参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55353155/