在制作这个节目期间,我发生了很多事情,我觉得最好问你们。
例如,如果我有一个调用向量的特定结构的循环,那么最好像这样反复调用向量:
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=...
哪一项在内存消耗和运行时方方面更好?
提前谢谢
答案 0 :(得分:5)
如果FP_list
是std::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)
效率是一种权衡。你编写代码的方式是复制结构。根据制作副本的成本,可能比评估索引表达的额外时间要差得多。
我的结论:尽可能干净地编写代码,这样很明显它正在做什么,然后让编译器中的优化器担心效率。如果性能确实成为一个问题,那么首先进行配置,这样您就可以确定自己正在优化正确的问题。