列表上的 std::min_element 不返回最小值
Posted
技术标签:
【中文标题】列表上的 std::min_element 不返回最小值【英文标题】:std::min_element on list does not return the minimum 【发布时间】:2017-12-26 06:33:31 【问题描述】:我有一个while
循环,它用一些double
s 初始化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 << *min_element(allDistances.begin(), allDistances.end()) << endl;
为什么?
因为min_element
将迭代器返回到最小值而不是最小值本身。
如果需要实际值,则必须取消引用 min_element
返回的迭代器。
从documentation可以看出min_element
的签名是:
template< class ForwardIt >
ForwardIt min_element( ForwardIt first, ForwardIt last );
它返回一个ForwardIt
,即一个前向迭代器
【讨论】:
这也终于解释了为什么我不需要额外编写一个迭代器。太好了,谢谢!以上是关于列表上的 std::min_element 不返回最小值的主要内容,如果未能解决你的问题,请参考以下文章
在 vector<double> 上使用 std::max_element