3

有诸如此类的方法的原因是什么void QList::push_back ( const T & value )

append()在 QT 中,当它与文档的含义是什么兼容时做同样的事情。谁能详细说明一下

以下是来自QT官方文档的声明

"这个函数是为了兼容 STL 而提供的。它相当于 append(value) "

4

4 回答 4

7

这通常用于期望标准容器作为其模板参数的方法模板也可以与 a 一起使用QList,因为它们将共享相同的方法。

例如:

template<typename Container>
void move_elements(Container &to, const std::vector<int> &from)
{
  for (auto elem : from)
    to.push_back(elem);
}

可以使用 astd::list<int>和 aQList<int>作为to参数调用。

于 2013-08-01T09:27:01.037 回答
4

这是为了兼容性,因此您可以将 QList 发送到 在标准容器上运行的算法。我认为这是主要好处,因此您可以使用<algorithm>. 我举一个find_iffrom的例子<algorithm>

bool hasChildChecked(){
      return std::find_if(childItems_.begin(), 
                          childItems_.end(),checked()) != childItems_.end();
      }

我的 childItems_ 被声明为:

QList<TreeItem*> childItems_;

struct checked {
           bool operator()(const TreeItem* t) {
               return t->moduleInfo_.currentlyEnabled;
           }
       };

这种兼容性确实节省了我的时间,并使编码变得更加容易。

于 2013-08-01T09:30:07.390 回答
1

你可能会遇到这种情况:

template <
    template <
        typename ValueType,
        typename Allocator
    > class Container
> class garbage_collector
{
    /* some implementation */
};

因为 QList 与 STL 容器具有相同的方法名称,所以可以在此上下文中使用它。

于 2013-08-01T09:26:46.783 回答
0

C++ 的 STL(标准模板库)将函数 push_back() 用于列表和向量,因此它是大多数 C++ 程序员熟悉的方法。因此,他们在调用该方法时为模板参数兼容性提供了一个额外的方法。

于 2013-08-01T09:25:24.637 回答