cbegin()/ cend()vs constBegin()/ constEnd()

时间:2015-09-03 10:07:22

标签: c++ qt iterator qt5

Qt 5.0在不同的容器类中引入了迭代器方法cbegin()cend(),如QListQMap

但这些类中还有constBegin()constEnd()方法。

所有这些方法都是const并返回STL风格的const_iterator

  • cbegin() / cend()具有与constBegin() / constEnd()相同的功能吗?对我来说似乎如此,但QListQMapcontainer classes的文档中没有说明任何内容。
  • 是否应该使用cbegin() / cend()代替constBegin() / constEnd(),反之亦然?

2 个答案:

答案 0 :(得分:10)

cbegin()cend()是为了与标准库容器兼容而引入的,它们都包含自C ++ 11以来的这些函数。
Qt只是想保持它的界面类似于标准库。 constBegin()等只是旧版本(Qt在C ++ 11发布之前添加了它们)。使用它们没有区别。

我会使用constBegin()constEnd(),因为它们更加明确和'Qt风格',但这只是我个人的偏好。某些为标准容器实现的算法可能会使用cbegin() / cend()(因此它们存在于Qt中 - 它们有助于重用某些代码)。如果您希望在某些时候想要在Qt之外重用代码,请使用它们。

答案 1 :(得分:1)

Qt通常提供不同的使用方式,以便程序员可以使用他们习惯使用的样式。

Simmilar案例是与迭代器'类型。您可以使用标准库或Java样式迭代器中使用的标准样式。这是为了方便用户。

cbegin和constBegin的原因是simillar。此外,如果文件没有说明差异,那么没有区别。

正如你所注意到的那样。 constBegin是纯QtStyle,cbegin是STL样式。