【问题标题】:Can someone explain { } container in c++有人可以用 C++ 解释 { } 容器吗
【发布时间】:2020-09-10 07:10:07
【问题描述】:

有人可以用 c++ 解释 {}。 它与所有容器一起使用。 例子。

我一般用它来让 set 或 vector 之类的容器为空。

我在将 min/max 函数用于多个值时感到困惑。

vector<int> v = {1,2,3,4,5};
int a = min(v) // doesn't work.
int b = min({1,2,3,4,5}) // works and gives accurate answer.

【问题讨论】:

    标签: c++ stl set containers min


    【解决方案1】:

    std::min 的重载需要 std::initializer_list。正是这种重载用于

    int b = min({1,2,3,4,5});
    

    要获得通用可迭代容器的最小元素,您需要使用std::min_element

    int a = std::min_element(begin(v), end(v));
    

    对于最大值,请使用std::maxstd::max_element,如果适用。

    【讨论】:

    • C++20 Ranges 是否增强了这种操作? (我还在使用 C++14,所以我远远落后于最新的改进。)
    • @Eljay 我还没有时间检查范围(甚至不是它主要基于的旧范围-v3 库)所以我真的不知道。但我猜会的。
    【解决方案2】:

    std::minstd::max 都有一个采用 std::initializer_list 的重载,可以从像 {1,2,3,4,5} 这样的花括号初始化列表构造。

    min(v) 不起作用,因为std::vector 没有过载。

    因为像std::vectorstd::list这样的C++11 STL容器也可以是来自braced-init-list的list-initialized;当从空的(即{})初始化时,默认构造函数将是value-initialized。对于非空的括号初始化列表,它们将由采用 std::initializer_list 的重载构造函数初始化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多