如果没有等效功能;是否可以使用一行代码干净地生成QList<int>
(1, 2, 3, 4, 5 ... )
,避免使用for loop
或必须编写自己的函数?
答案 0 :(得分:2)
我不知道Qt容器的特殊性,但在STL中你可以做类似的事情:
std::vector<int> v(n);
std::iota(v.begin(), v.end(), 1);
或者,如果不使用C ++ 11,std::generate_n(v.begin(), v.end(), my_iota(1));
其中my_iota是一个由你编写的函子,它只返回n ++,在ctor中提供了初始值n。
如果Qt容器提供符合STL OutputIterator概念的迭代器,那么使用std :: generate或std :: iota就可以了。
Qt容器(QList和QVector)提供可以利用此功能的STL兼容迭代器:
#include <QDebug>
#include <QVector>
#include <numeric>
inline QVector<int> range(int start, int end)
{
QVector<int> l(end-start+1);
std::iota(l.begin(), l.end(), start);
return l;
}
int main()
{
qDebug() << range(-3, 4);
return 0;
}
打印
QVector(-3, -2, -1, 0, 1, 2, 3, 4)