Qt 5.0在不同的容器类中引入了迭代器方法cbegin()
和cend()
,如QList或QMap。
但这些类中还有constBegin()
和constEnd()
方法。
所有这些方法都是const
并返回STL风格的const_iterator
。
cbegin()
/ cend()
具有与constBegin()
/ constEnd()
相同的功能吗?对我来说似乎如此,但QList,QMap或container classes的文档中没有说明任何内容。cbegin()
/ cend()
代替constBegin()
/ constEnd()
,反之亦然?答案 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样式。