C ++中的标准库容器具有采用迭代器范围的构造函数。当输入容器的内容可以转换为结果容器中的内容但不相同时,或者即使容器只是不同,这也很方便。构造函数重载允许在周围类的构造函数中进行这种类型的转换,这样可以减少代码中的混乱。
所以问题出现了,为什么Qt容器没有这个过载?这是一个疏忽还是这个笨重的设计选择背后有原因?
答案 0 :(得分:5)
除了“迄今为止没有人实现它们”之外没有任何理由,因为Qt项目没有无限的开发带宽。
说到这些缺失的功能,你可以这样说:
QList::push_back(T &&)
); QList
在STL中没有等同物并且是一个非常奇怪的怪物,有严重的性能问题。现在已经承认,从来没有在Qt中使用过“好的通用容器”; 等等。
这些天有很多讨论(见this thread)关于与STL容器相比Qt容器的不良状态,以至于我们开始在Qt自己的实现中使用STL容器。
除非您有使用Qt的特定原因(比如,您需要将它们传递给Qt-ish API,或者您喜欢/需要隐式共享等),所以现在STL容器比Qt容器更好。
答案 1 :(得分:0)
Qt容器中缺少STL容器的几个功能。您可以在Marc Mutz here的博客中找到对它们的精彩评论。
我认为,计划是用qCopy
,http://doc.qt.io/qt-4.8/qtalgorithms.html替换构造中使用迭代器范围的特征。在Qt 5中,Qt中出现了许多用于包含的iterator
和const_iterator
特征,并且QList和QVector的适当构造函数也可能出现在更高版本中(未公布,只是一个想法)。