【问题标题】:c++ syntax to find min in a listc ++语法在列表中查找min
【发布时间】:2014-02-10 02:09:45
【问题描述】:

我看到一些关于这个主题的复杂讨论,但我没有让一段非常简单的代码工作。我找到了两种让它工作的方法,但我对一些语法问题感到困惑。我只想在列表中找到最小值。这有效:

using namespace std;

#include <iostream>
#include <list>
#include <algorithm>

int main(void)
{
  auto init_list = {10, 20, 30};
  list<int> alist(init_list);

  list<int>::iterator minnum = min_element(begin(alist), end(alist));

  cout << "The min in the list is: " << *minnum << endl;
  return(1);
}

但也有 min() 的定义,它以 initializer_list 作为参数。我想我误解了它的语法。因为我已经定义了一个 init_list 我可以调用

int minint = min(init_list);

这行得通。但我不明白为什么。 min 上的文档说此调用应采用以下形式:

template< class T, class Compare >
T min( std::initializer_list<T> ilist, Compare comp );

所以我不应该指定一个

int minint = min(init_list, operator<);
int minint = min(init_list, int::operator<);

我应该如何通过操作员?显然,在这种情况下这并不重要,但如果我的列表不是整数列表,而是带有重载运算符的一些自定义类型的列表,那么我需要传递一个 operator

【问题讨论】:

  • 您在哪里找到此文档?
  • 我在link 找到了它。但正如 Tomasz Klak 在下面正确指出的那样,我一定没有仔细阅读,因为我错过了其中一个函数定义。

标签: c++ list syntax min


【解决方案1】:

version of min(第三个声明)只接受初始化列表。

如果您想明确与&lt; 关系进行比较,请使用std::less

int minint = min(init_list, std::less<int>());

【讨论】:

  • 谢谢,显然我没有仔细阅读这个定义。现在我已经回答了我的另一个问题。接受您的回答后,我将在下面发布我的答案。抱歉,我还没有足够的声望来支持您的回答,但我看到其他人正在这样做。
【解决方案2】:

感谢托马斯·克拉克。我对运算符重载很陌生,所以我不知道 std::less 语法。知道这一点非常有用。显然我没有仔细阅读,因为我错过了 min() 的其他定义。我的另一个问题是关于它如何与自定义对象一起使用。我想我现在已经为自己回答了这个问题。这是我发现的。

您可以制作自定义对象的初始化列表。例如,我有一个非常简单的类,我称之为 Double_list_struct,它只是一个 int(索引)和 double(值)的容器,具有一些典型的成员函数(构造函数、getter、setter、toString() 和重载运算符,包括 operator

Double_list_struct doub1(1,5.5);
Double_list_struct doub2(1,3.5);
Double_list_struct doub3(1,26.5);

auto init_list_doub = {doub1, doub2, doub3};

完成此操作后,min() 函数可以很好地工作。

Double_list_struct mindoub = min(init_list_doub);

我假设(但尚未检查)如果 Double_list_struct 类没有包含 operator

干杯!

【讨论】:

    猜你喜欢
    • 2014-09-27
    • 2018-12-02
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多