我有這個從普通陣列創建的QList
Struct values[] = {
{ a, b },
{ c, d }
};
而我只是想創建一個QList
出來的
QList<Struct> ql(values + 0, values + 2);
但由於某些原因,QList
有沒有合適的構造和看似沒有合適的insert
功能。這個怎麼用?我在Qt4.6上。
我有這個從普通陣列創建的QList
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::copy
連同back_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));
謝謝。這只是可怕:) –
首先我想用一個int數組作爲例子,但我想有人會推薦'q1 << 1 << 2',所以我拿了聚合初始化的例子:)謝謝,'std: :複製'是spot-on,我會這樣做! –