Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在不使用任何迭代器的情况下获得QList中QList的最小值和最大值?_C++_Qt_Qlist - Fatal编程技术网

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

C++ 如何在不使用任何迭代器的情况下获得QList中QList的最小值和最大值?,c++,qt,qlist,C++,Qt,Qlist,有没有一种方法可以在不使用任何迭代器的情况下获得QList中的最小值和最大值 下面是使用迭代器的代码: QList<double>::iterator min = std::min_element(listVal.begin(), listVal.end()); QList<double>::iterator max = std::max_element(listVal.begin(), listVal.end()); QList::iterator min=std::

有没有一种方法可以在不使用任何迭代器的情况下获得QList中的最小值和最大值

下面是使用迭代器的代码:

QList<double>::iterator min = std::min_element(listVal.begin(), listVal.end());
QList<double>::iterator max = std::max_element(listVal.begin(), listVal.end());
QList::iterator min=std::min_元素(listVal.begin(),listVal.end());
QList::iterator max=std::max_元素(listVal.begin(),listVal.end());

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

qSort(listVal.begin(), listVal.end());
double min = listVal.first();
double max = listVal.last();

如果您不希望迭代器作为结果,而是直接输入值,则可以直接输出结果:

//assert(!listVal.empty());
double min = *std::min_element(listVal.begin(), listVal.end());
double max = *std::max_element(listVal.begin(), listVal.end());
在C++17中,使用结构绑定:

//assert(!listVal.empty());
auto [min, max] = *std::minmax_element(listVal.begin(), listVal.end());

避免集装箱往返:

QList<int> l {2,34,5,2};
auto mm = std::minmax_element(l.begin(), l.end());
qDebug() << *mm.first << *mm.second;
QList l{2,34,5,2};
自动mm=std::minmax_元素(l.begin(),l.end());

qDebug()您必须以某种方式迭代列表。您可以在没有迭代器对象通过索引访问元素的情况下执行此操作,但随后您必须自己进行实际计算。为什么要这样做?为什么要在没有迭代器的情况下这样做?(您仍然可以在C++11中使用
auto
,以避免编写
QList::iterator
)为什么要避免迭代,这是一种优化吗?如果是这样的话,您只需在项目添加到列表中时跟踪最小值和最大值,并且仅在删除项目时进行迭代即可。是否希望
double min=*std::min_元素(listVal.begin(),listVal.end())?(假设列表不是空的)。该解决方案比@vahancho的解决方案好,因为我不需要对列表排序。所以我赢了一行代码。请注意,复杂性现在是
nlog(n)
而不是
n
。计算复杂度更高,但对我来说是非常简单的解决方案