C++ vector.back()和vector[vector.size()-1]之间的差异?

C++ vector.back()和vector[vector.size()-1]之间的差异?,c++,vector,C++,Vector,调用vector.back()和使用std::vector调用vector.back()和vector[vector.size()-1]之间有什么区别吗?vector.back()是一个函数调用,编写起来更简单vector[vector.size()-1]是两个函数调用和一个减法运算,编写时间更长:更复杂 在行为上,它们对于std::vector是相同的。但是,back更通用,可用于所有标准双向容器(std::forward\u list是唯一不支持它的标准容器)运算符[]仅受随机访问容器支持。

调用
vector.back()
和使用
std::vector
调用
vector.back()
vector[vector.size()-1]
之间有什么区别吗?

vector.back()
是一个函数调用,编写起来更简单
vector[vector.size()-1]
是两个函数调用和一个减法运算,编写时间更长:更复杂

在行为上,它们对于
std::vector
是相同的。但是,
back
更通用,可用于所有标准双向容器(
std::forward\u list
是唯一不支持它的标准容器)<代码>运算符[]仅受随机访问容器支持。

vector.back()
更易于读取和写入。此外,提供
c.back()
的容器比提供
c[c.size()-1]
的容器更多,这对于泛型代码很重要


在调试运行时,两者同样可能被困在空容器中,使用优化时生成的代码和它们的性能也不会有显著差异。

可读性是一个主要区别。向量为空的情况也会浮现在脑海中。当向量为空时,两者都会导致未定义的行为。除了其他答案外,back还存在于其他非随机访问的标准容器中,如列表。使用它将有助于使您的代码容器类型不可知。@Steve说得好。我把它添加到我的答案中。不知道为什么计数函数调用。。。这与性能无关,但似乎与此相关…@Jarod42性能是毫无疑问的。有一个关于差异的问题。操作的数量不同,这会影响复杂性,如果不是性能的话,复杂性也会影响可读性。@Jarod42我不明白,当然这不会影响性能,但如果我没有弄错的话,函数调用是有代价的,所以理论上,我会说函数调用越多,性能就会降低得越多。我错了吗?@Fareanor:
back()
可能在内部与另一个一起实现(使
back
性能降低)。我认为这一数字可能会误导读者,因为读者可能会将其理解为性能问题,而不是答案所预期的阅读“困难”。(我避免使用与IMO有相同问题的“复杂性”一词)。@Jarod42哦,对了,通过阅读您的第一条评论,我没有看到这些担忧。感谢您的澄清:)