什么是Qt相当于Python的range()函数,返回一个QList <int>?

时间:2015-12-23 20:24:55

标签: python qt integer range qlist

如果没有等效功能;是否可以使用一行代码干净地生成QList<int> (1, 2, 3, 4, 5 ... ),避免使用for loop或必须编写自己的函数?

1 个答案:

答案 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)