列表上的 std::min_element 不返回最小值

Posted

技术标签:

【中文标题】列表上的 std::min_element 不返回最小值【英文标题】:std::min_element on list does not return the minimum 【发布时间】:2017-12-26 06:33:31 【问题描述】:

我有一个while 循环,它用一些doubles 初始化list

我想输出最小值,但到目前为止我所做的似乎不起作用,因为我没有得到任何输出。

这是我的代码的相关部分:

    list<double> allDistances;

    std::ifstream infile("ATXTFile.txt");
    while (std::getline(infile, data)) 

        //do some stuff
        //dist are some double values
        allDistances.push_back(dist);
    

    cout << min_element(allDistances.begin(), allDistances.end()) << endl;


【问题讨论】:

我们不知道。请告诉我们minimal reproducible example。 另外请定义“不起作用”。编译错误?运行时错误?结果不正确? 因为没有示例,我将尝试猜测。你在做类似auto it = min_element 的事情,然后使用*it 打印实际的最小元素吗? min_element 返回一个迭代器而不是最小值本身。 什么不起作用?向我们展示您所做的事情、发生的事情以及您期望发生的事情。 好的,我编辑了我的问题,告诉我是否可以澄清一下 【参考方案1】:

问题在于您打印最小值的方式

以下将起作用: cout &lt;&lt; *min_element(allDistances.begin(), allDistances.end()) &lt;&lt; endl;

为什么?

因为min_element 将迭代器返回到最小值而不是最小值本身。 如果需要实际值,则必须取消引用 min_element 返回的迭代器。

从documentation可以看出min_element的签名是:

template< class ForwardIt > 
ForwardIt min_element( ForwardIt first, ForwardIt last );

它返回一个ForwardIt,即一个前向迭代器

【讨论】:

这也终于解释了为什么我不需要额外编写一个迭代器。太好了,谢谢!

以上是关于列表上的 std::min_element 不返回最小值的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能让 min_element 以最低值捕获所有点?

在 vector<double> 上使用 std::max_element

Vector求最大值最小值

GraphQL - 如果父返回类型是对象列表,则模式拼接上的模式委派不起作用

集合列表上的Python .sort()返回无[重复]

字符串列表上的 BigQuery 左连接返回 null