从普通数组创建QList

Joh*_*itb 7 c++ qt

我有这个

Struct values[] = {
  { a, b },
  { c, d }
};
Run Code Online (Sandbox Code Playgroud)

我只是想创造一个QList

QList<Struct> ql(values + 0, values + 2);
Run Code Online (Sandbox Code Playgroud)

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

Luc*_*lle 14

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

QList<Struct> ql = 
    QList<Struct>::fromStdList(std::list<Struct>(values + 0, values + 2));
Run Code Online (Sandbox Code Playgroud)

但是,这会产生两个数组内容副本而不是一个副本.

另一种解决方案是使用std::copy一个一起back_inserter:

QList<Struct> ql;
ql.reserve(2);
std::copy(values + 0, values + 2, std::back_inserter(ql));
Run Code Online (Sandbox Code Playgroud)

如果你使用数组只是为了有一个简单的方法来初始化QList,你也许可以使用插入运算符(假设Struct定义了正确的构造函数):

QList<Struct> ql;
ql << Struct(a, b)
   << Struct(c, d);
Run Code Online (Sandbox Code Playgroud)