从普通数组创建QList

时间:2011-09-05 13:32:01

标签: c++ qt

我有这个

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

我只想创建一个QList

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

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

2 个答案:

答案 0 :(得分:13)

一种解决方案是首先创建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);

答案 1 :(得分:2)

使用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));