很抱歉,如果之前有人询问,但我想知道std::vector::front()
的用途是什么。
是否有理由使用例如myvector.front()
而不是myvector[0]
或myvector.at(0)
?
答案 0 :(得分:21)
一些也适用于列表的通用算法使用它。
这是一个一般原则的示例:如果您为所支持的所有语义提供访问器,而不仅仅是您支持的实现,则通常更容易编写因此更容易重用代码。
答案 1 :(得分:13)
如果myvector的类型更改为另一种不可索引的数据类型(例如列表),则不必更改访问容器前面的代码。
答案 2 :(得分:6)
这样做提供了一种叫做静态多态的东西。
假设我使用队列类编写了算法。它有一个front()函数来获取队列的下一个元素,以及一个enqueue()函数来添加到队列的末尾。现在让我说我发现这个队列类写得很差而且非常慢,而且我宁愿使用std :: vector,这要快得多(我知道有一个std :: queue,这只是一个例子)。如果获取std :: vector的第一个元素的唯一方法是使用v [0],我必须通过我的代码并用[0]替换所有对front()的调用。但是通过实现front(),std :: vector现在可以成为我的队列类的替代品。我必须更改的唯一代码是算法中容器的类型。