2

有没有区别:

mvt_act_idx = openCloseList.size()-1;
openCloseList[mvt_act_idx].A += a;

 openCloseList.back().A += a;

除了可读性?

4

2 回答 2

2
mvt_act_idx = openCloseList.size()-1;
openCloseList[mvt_act_idx].A += a;

如果openCloseList为空,无符号减法将产生一个巨大的值,然后用于索引向量。索引运算符可以断言,也可以不断言。

openCloseList.back().A += a;

如果openCloseList为空,则back操作可以断言,也可以不断言。

在这种错误的情况下,故障back可能更容易理解。

无论如何,第一个代码片段可能与一些不使用无符号整数作为数字的准则冲突(除了模行为简化和澄清代码的地方),而调用back不能与任何此类准则冲突。

于 2012-06-15T11:05:06.537 回答
1

没有有用的区别。

直接使用back()可能会更有效,但我对此表示怀疑。如果您真的很感兴趣,可以查看生成的汇编程序。可能会产生一两条指令的不同,这取决于您的编译器有多聪明。

我确实注意到前一种方式仅使用size()并且[]对于理解数组或在任何其他语言中使用类似结构的人来说会更加熟悉;back()更具体一点 C++ (尽管它几乎不是一个神秘的习语)。

于 2012-06-15T10:47:54.083 回答