c++ - 如何以有效的方式将输入参数传递给函数

标签 c++

我有一个结构定义为

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/

相关文章:

c++ - end() 返回的迭代器对于哪个标准容器(如果有)是持久的?

c++ - 推导原始类型的知识,同时转发

c++ - 如何在 Windows 服务应用程序中启动系统时运行代码?

C++ 运算符重载和参数化构造函数

c++ - 如何从 C/C++ 程序调用 __strlen_sse2? [Linux]

c++ - 有关 Windows 中 PTE(页表条目)的信息

c++ - IPP 或 JetDirect 服务器实现

c++ - 了解编译器 - 什么都不做的声明?

java - 从子类的子类访问父成员

c++ - 派生类中何时实际需要 "virtual"属性?