从普通数组创建QList

Creating a QList from a plain array

本文关键字:创建 QList 数组      更新时间:2023-10-16

我有这个

Struct values[] = {
  { a, b },
  { c, d }
};

我想从中创建一个QList

QList<Struct> ql(values + 0, values + 2);

但由于某种原因,QList没有合适的构造函数,insert似乎也没有合适的函数。这是如何工作的呢?我在Qt4.6.

一种解决方案是首先创建std::list,然后将其转换为QList:

QList<Struct> ql = 
    QList<Struct>::fromStdList(std::list<Struct>(values + 0, values + 2));

但是,这将导致数组内容的两个副本,而不是一个。

另一个解决方案是使用std::copyback_inserter:

QList<Struct> ql;
ql.reserve(2);
std::copy(values + 0, values + 2, std::back_inserter(ql));

如果使用数组只是为了方便地初始化QList,则可以使用插入操作符(假设Struct定义了正确的构造函数):

QList<Struct> ql;
ql << Struct(a, b)
   << Struct(c, d);

使用fromStdList()静态成员函数作为:

std::list<Struct> stdList(values + 0, values + 2);
QList<Struct> ql = QList<Struct>::fromStdList(stdList);

或者一行:

QList<Struct> ql = QList<Struct>::fromStdList(std::list<Struct>(values + 0, values + 2));