C++ 如何在不使用任何迭代器的情况下获得QList中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<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
。计算复杂度更高,但对我来说是非常简单的解决方案