如何在不使用任何迭代器的情况下获取Qt中QList的最小值和最大值?

7 c++ qt qlist

有没有办法在不使用任何迭代器的情况下获取Qt中QList的最小值和最大值?

这是使用迭代器的代码:

QList<double>::iterator min = std::min_element(listVal.begin(), listVal.end());
QList<double>::iterator max = std::max_element(listVal.begin(), listVal.end());
Run Code Online (Sandbox Code Playgroud)

Jar*_*d42 15

如果您不希望迭代器作为结果而直接使用值,则可以直接推导结果:

//assert(!listVal.empty());
double min = *std::min_element(listVal.begin(), listVal.end());
double max = *std::max_element(listVal.begin(), listVal.end());
Run Code Online (Sandbox Code Playgroud)


Cap*_*liC 8

避免往返集装箱:

QList<int> l {2,34,5,2};
auto mm = std::minmax_element(l.begin(), l.end());
qDebug() << *mm.first << *mm.second;
Run Code Online (Sandbox Code Playgroud)


vah*_*cho 5

您可以对列表进行排序,并将第一个和最后一个元素分别作为最小值和最大值:

qSort(listVal.begin(), listVal.end());
double min = listVal.first();
double max = listVal.last();
Run Code Online (Sandbox Code Playgroud)

  • 请注意,复杂度现在是“n log(n)”而不是“n”。 (14认同)