c ++通过引用函数中的另一个函数传递参数

时间:2016-04-24 16:22:44

标签: c++ pass-by-reference

我是c / c ++的新手,我正在尝试为遗传算法构建一个程序(使用MS Visual Studio 2013)。我将免除你对这个程序的详细信息,但我确实有一个问题,即通过引用传递参数'。 我可以通过引用函数内的另一个函数来传递参数吗?在下面,您可以找到我的代码的一个简单示例。

struct solution{
int list1[100];
int list2[100];
int list3[100];
int list4[100];
};

void function1(solution& foo)
{
// Algorithm that fills list2
function2(foo);   // Fills in list3
function3(foo);   // Fills in list4
}

void function2(solution& foo)
{
// algorithm to fill in list3
}

void function3(solution& foo)
{
// algorithm to fill in list4
}

void localSearch(solution& foo)
{
for(int i = 0; i < 10; i++)
{
    // Change a random value in list1 of foo
    // Rerun function1 and see if it is a better solution
    function1(foo);
}
}

int main()
{
solution bar;
// Fill list1 of bar randomly by other function

function1(bar);
// Output finished solution

return 0;
}

如果我尝试这样做,我会遇到各种各样的错误......接下来,我的解决方案结构被破坏,list1中的第一个位置随机变回0。 我尝试了几件事来缓解这种情况,但似乎没有任何效果。如果我只是通过值将解决方案传递给function1,程序似乎运行,但速度更慢,因为它必须复制这个大型结构。

所以我的问题是:

1)是否可以在函数1中通过引用传递给另一个函数的参数传递(通过引用)?

2)什么是更好的解决方案?

1 个答案:

答案 0 :(得分:0)

  

1)是否可以在function1中传递(通过引用)通过引用另一个函数传递的参数?

是的,可以通过引用另一个函数传递相同的变量。

void f1(My_Class& m); // Forward declaration.
void f2(My_Class& m);

void f1(My_Class& m) // Definition.
{
    f2(m);
}

void f2(My_Class& m)
{
   ;
}

前向声明为编译器提供了关于如何使用函数(它们的语法)的“抬头”。如果没有前向声明,编译器将从其定义中获取知识。但是,定义或前向声明必须在函数调用之前。

  

2)什么是更好的解决方案?

以下是改善解决方案的一些想法:
1)使用std::vector代替数组。

2)考虑一个std::vector个结构,而不是一个数组结构:

   struct List_Record
   {
      int item1;
      int item2;
      int item3;
      int item4;
   };
   std::vector<List_Record> My_Lists(100);
// or
   List_Record My_Array[100];

将项目放在结构或记录中可以让处理器更好地管理数据缓存(连续放置所有项目)。

3)在结构中创建一个初始化方法。
您应该有一个构造函数,用于加载具有默认值的数据项 考虑添加一个从文件加载数据项的方法(对测试非常有用)。