std :: vector :: back和vector :: operator [vector :: size() - 1]之间的区别

时间:2012-06-15 10:42:18

标签: c++ stl

之间有区别:

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

 openCloseList.back().A += a;

除了可读性?

2 个答案:

答案 0 :(得分:2)

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

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

openCloseList.back().A += a;

如果openCloseList为空,back操作可能会断言。

如果出现此类错误,back中的错误可能更容易理解。

无论如何,第一个代码片段可能与某些指南冲突,不使用无符号整数作为数字(模数行为简化和澄清代码的情况除外),同时调用{{ 1}}不能与任何此类准则发生冲突。

答案 1 :(得分:1)

没有用处。

直接使用back()可能会提高效率,但我对此表示怀疑。如果你真的很敏锐,你可以看一下生成的汇编程序。根据编译器的聪明程度,可能会对一两条指令产生影响。

我注意到,只使用size()[]的前一种方式对于理解数组或使用任何其他语言的类似结构的人来说会更为熟悉; back()更具有C ++特色(虽然它几乎不是一个神秘的习语)。