初始化另一个变量或反复使用原始变量

时间:2014-04-15 12:55:37

标签: c++ memory-management

在制作这个节目期间,我发生了很多事情,我觉得最好问你们。

例如,如果我有一个调用向量的特定结构的循环,那么最好像这样反复调用向量:

FP_list[n].callsign=...
FP_list[n].de_airport=...
FP_list[n].ar_airport=...;
FP_list[n].aircraft_type=...
FP_list[n].trueairspeed=...
FP_list[n].FL_route.push_back(Aircraft.GetClearedAltitude());
FP_list[n].last_WP=...
FP_list[n].next_WP=...

...

或者声明一个临时变量并从那一点开始使用它:

FP temp=FP_list[n];
temp.callsign=...
...
temp.next_WP=...

哪一项在内存消耗和运行时方方面更好?

提前谢谢

2 个答案:

答案 0 :(得分:5)

如果FP_liststd::vector或类似的,您可以这样做:

FP& p = FP_list[n];
 ^^^ use a reference
p.callsign = ...;
p.de_airport = ...;
p.ar_airport = ...;

此代码使用引用来访问数据。引用使您可以直接访问它引用的元素。它的工作方式有点像指针。现在,您只需拨打operator[]一次,您的代码就会更加紧凑。

如评论中所述,如果您对矢量本身进行了更改,请注意参考可能会失效,例如:添加或删除元素。

这假设您实际上想要更改存储在向量中的内容。如果您不想更改它们,则必须创建副本:FP p = FP_list[n];

答案 1 :(得分:2)

效率是一种权衡。你编写代码的方式是复制结构。根据制作副本的成本,可能比评估索引表达的额外时间要差得多。

我的结论:尽可能干净地编写代码,这样很明显它正在做什么,然后让编译器中的优化器担心效率。如果性能确实成为一个问题,那么首先进行配置,这样您就可以确定自己正在优化正确的问题。