什么是std :: vector :: front()用于?

Tim*_*Tim 22 c++ stl vector

对不起,如果之前有人询问,但我想知道它的用途std::vector::front()是什么.

有没有理由使用例如myvector.front(),而不是myvector[0]myvector.at(0)

dmc*_*kee 21

一些也适用于列表的通用算法使用它.

这是一个通用原则的示例:如果为所支持的所有语义提供访问器,而不仅仅是您支持的实现,则更容易编写,因此更容易重用代码.

  • 啊,所以更多的是与其他容器类的一致性。只是出于好奇:vector::front() 是等价于 [0] 还是 at(0)?我的意思是,如果向量为空会发生什么? (2认同)
  • @蒂姆:好问题。维基百科说未定义的行为:http://en.wikipedia.org/wiki/Vector_(C%2B%2B) 和 http://fredosaurus.com/notes-cpp/stl-containers/sequence-functions.html 说同样的事情as [0] 我认为如果向量为空,它也是未定义的。 (2认同)

Ann*_*nne 13

如果myvector的类型更改为另一种不可索引的数据类型(例如列表),则不必更改访问容器前端的代码.

  • 你和之前的海报的答案应该结合起来.抽象概念+胜利的具体例子. (2认同)

Col*_*lin 6

这样做提供了一种称为静态多态的东西.

假设我使用队列类编写了算法.它有一个front()函数来获取队列的下一个元素,以及一个enqueue()函数来添加到队列的末尾.现在让我说我发现这个队列类写得很差而且非常慢,而且我宁愿使用std :: vector,这要快得多(我知道有一个std :: queue,这只是一个例子).如果获取std :: vector的第一个元素的唯一方法是使用v [0],我必须通过我的代码并用[0]替换所有对front()的调用.但是通过实现front(),std :: vector现在可以成为我的队列类的替代品.我必须更改的唯一代码是算法中容器的类型.