有没有区别:
mvt_act_idx = openCloseList.size()-1;
openCloseList[mvt_act_idx].A += a;
和
openCloseList.back().A += a;
除了可读性?
mvt_act_idx = openCloseList.size()-1;
openCloseList[mvt_act_idx].A += a;
如果openCloseList
为空,无符号减法将产生一个巨大的值,然后用于索引向量。索引运算符可以断言,也可以不断言。
openCloseList.back().A += a;
如果openCloseList
为空,则back
操作可以断言,也可以不断言。
在这种错误的情况下,故障back
可能更容易理解。
无论如何,第一个代码片段可能与一些不使用无符号整数作为数字的准则冲突(除了模行为简化和澄清代码的地方),而调用back
不能与任何此类准则冲突。
没有有用的区别。
直接使用back()
可能会更有效,但我对此表示怀疑。如果您真的很感兴趣,可以查看生成的汇编程序。可能会产生一两条指令的不同,这取决于您的编译器有多聪明。
我确实注意到前一种方式仅使用size()
并且[]
对于理解数组或在任何其他语言中使用类似结构的人来说会更加熟悉;back()
更具体一点 C++ (尽管它几乎不是一个神秘的习语)。