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函数调用中指定它?
如果你想明确与<关系进行比较,请使用std :: less:
int minint = min(init_list, std::less<int>());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1031 次 |
| 最近记录: |