初始化另一个变量或反复使用原始变量
Initialize another variable or use the original over and over
在这个程序的制作过程中,我经常遇到这种情况,我觉得最好问问你们。
例如,如果我有一个循环调用向量的特定结构,那么像这样反复调用向量更好吗:
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=...
在内存消耗和运行时间方面,哪一个更好?
提前感谢
如果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];
。
效率是一种权衡。你编写代码的方式就是复制结构。根据制作该副本的成本,它可能比评估索引表达式的额外时间差得多。
我的结论是:尽可能干净地编写代码,以便清楚地了解它在做什么,然后让编译器中的优化器担心效率。如果性能确实成了一个问题,那么先分析一下,这样你就可以确保你正在手动优化正确的问题。
相关文章:
- std::move 如何使原始变量的值无效?
- 如果包含引用成员的类中缺少原始变量,为什么它仍然可以访问?
- 如何从字符串变量为正则表达式构建原始字符串
- 是否可以保证浮点变量的副本将按位等效于原始副本?
- 为什么存储在变量中的值比原始答案少 1?
- 在C++中使用多线程时,是否可以读取半写的、损坏的原始变量?
- 如何将变量用作原始 JSON 字符串中的数据?
- #defined 函数只能接受原始输入而不接受变量?
- C 为什么在原始双阵列中的分配似乎比双变量分配要快得多
- 我应该重置Destructor中的原始成员变量
- C++ 如何更改函数中原始变量的值
- 带有布尔转换的变量的原始打印:意外行为
- 带有原始指针的boost :: shared_ptr变量的条件初始化
- 使用 const_cast<> 并更改地址处的值不会更改原始变量
- 重载运算符保持变量更新,而不是保持原始变量
- 在C++中使用别名而不更改原始变量的值
- 绑定C++成员变量:getter/setter 或原始指针
- 如何修改通过值传递的原始变量的内容
- 如果使用引用的目的是更改原始变量的值,为什么要使用 const 引用传递?[C++]
- [C++传递值]:被调用函数是否可以修改原始变量的内容