C++ 为什么std::min只支持初始值设定项\u列表?

C++ 为什么std::min只支持初始值设定项\u列表?,c++,std,C++,Std,我们可以通过以下方式使用std::min: // 1. int a = 1, b = 2; std::min(a, b); // 2. std::min({1,2,3,4}); 但是为什么不能使用std::vector或std::list,因为模板中的参数是初始值设定项\ u list 这种设计的原因是什么 但是为什么不能使用std::vector或std::list,因为模板中的参数是初始值设定项\ u list 因为没有可以接受向量或列表的重载。这些不是初始化列表 由于C++20,您可以

我们可以通过以下方式使用std::min:

// 1.
int a = 1, b = 2;
std::min(a, b);

// 2.
std::min({1,2,3,4});
但是为什么不能使用std::vector或std::list,因为模板中的参数是初始值设定项\ u list

这种设计的原因是什么

但是为什么不能使用std::vector或std::list,因为模板中的参数是初始值设定项\ u list

因为没有可以接受向量或列表的重载。这些不是初始化列表

由于C++20,您可以使用std::ranges::min,您可以将这些容器或任何范围传递到其中。在此之前,有一个std::min_元素可以与任何一对迭代器一起工作

但是为什么不能使用std::vector或std::list,因为模板中的参数是初始值设定项\ u list

因为没有可以接受向量或列表的重载。这些不是初始化列表


由于C++20,您可以使用std::ranges::min,您可以将这些容器或任何范围传递到其中。在此之前,有一个std::min_元素可以与任何一对迭代器一起工作。

要解释它为什么不接受容器,请考虑语义:

std::min{foo,bar,你好}

std::min的语义意味着在输入参数中找到最小值。因此,std::min/std::max接受两个参数,或者一个初始值设定项列表作为更多参数

min不提供遍历容器的能力,因为容器被视为一个参数

要在容器中查找最小值,有std::min_元素,eerorika建议C++20中的std::ranges::min更好


对于std::min_元素的用法,您可以参考。

来解释它不接受容器的原因,请考虑语义:

std::min{foo,bar,你好}

std::min的语义意味着在输入参数中找到最小值。因此,std::min/std::max接受两个参数,或者一个初始值设定项列表作为更多参数

min不提供遍历容器的能力,因为容器被视为一个参数

要在容器中查找最小值,有std::min_元素,eerorika建议C++20中的std::ranges::min更好

有关std::min_元素的用法,请参阅

他们越是过度考虑管道,就越容易堵塞排水管蒙哥马利·斯科特指挥官

std::min的目的是返回其参数中较小的参数。简洁明了。与您自己的设计一样,函数或函数模板最好只做一件事,而不是做很多事情。因此,std::min不了解容器。它只知道如何拿两样东西来比较。容器的知识被授予std::min_元素。在这两个模板之间,涵盖了大多数用例

一个未涵盖的情况是,当两个以上的元素不是容器中某个范围的元素时,找到这些元素的最小值。这种情况可以通过菊花链std::min来处理,但这样做有点尴尬。对于C++11,决定处理更多参数的好处大于使模板复杂化的成本,只要复杂度保持在最低限度。因此,选择了一种简单的机制来提供任意数量的参数,即std::initializer\u list。不需要允许任意容器,因为std::min_元素已经涵盖了这种情况

他们越是过度考虑管道,就越容易堵塞排水管蒙哥马利·斯科特指挥官

std::min的目的是返回其参数中较小的参数。简洁明了。与您自己的设计一样,函数或函数模板最好只做一件事,而不是做很多事情。因此,std::min不了解容器。它只知道如何拿两样东西来比较。容器的知识被授予std::min_元素。在这两个模板之间,涵盖了大多数用例


一个未涵盖的情况是,当两个以上的元素不是容器中某个范围的元素时,找到这些元素的最小值。这种情况可以通过菊花链std::min来处理,但这样做有点尴尬。对于C++11,决定处理更多参数的好处大于使模板复杂化的成本,只要复杂度保持在最低限度。因此,选择了一种简单的机制来提供任意数量的参数,即std::initializer\u list。没有必要允许任意容器,因为std::min_元素已经涵盖了这种情况。

您可以使用std::max_元素您可以使用std::max_元素ye,我发现std::min_元素用于vector.ye,我发现std::min_元素用于向量。我研究它只是为了找出基本库。我研究它只是为了找出基本库。
template <class T, class Compare>
  pair<T,T> minmax (initializer_list<T> il, Compare comp);