用于在列表中查找min的c ++语法

gle*_*ell 2 c++ syntax list min

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

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);
}
Run Code Online (Sandbox Code Playgroud)

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

int minint = min(init_list);
Run Code Online (Sandbox Code Playgroud)

这很有效.但我不明白为什么.关于min的文档说这个调用应该是以下形式:

template< class T, class Compare >
T min( std::initializer_list<T> ilist, Compare comp );
Run Code Online (Sandbox Code Playgroud)

所以我不应该指定一个<比较运算符才能使用它(显然不是......为什么?)?但是,我不知道如何正确传递此操作符,并且无法得出明确的解释.以下各项都会产生各种语法错误:

int minint = min(init_list, operator<);
int minint = min(init_list, int::operator<);
Run Code Online (Sandbox Code Playgroud)

我该如何通过运营商?显然,在这种情况下并不重要,但如果我的列表不是一个int列表,而是一些带有重载运算符的自定义类型的列表,那么我是否需要传递一个运算符<?或者语法是否只是意味着类T必须定义比较运算符,但您不必在min函数调用中指定它?

tum*_*dum 6

有只有初始化列表的min(第三个声明)的版本.

如果你想明确与<关系进行比较,请使用std :: less:

int minint = min(init_list, std::less<int>());
Run Code Online (Sandbox Code Playgroud)