什么类型的自动用于容器?

lea*_*vst 12 c++ types auto c++11

我可以通过在C++中使用不同的容器来实现相同的输出.例如 ..

    std::array<int, 5> v = {1,2,3,4,5};
    for(auto i : v)
        std::cout << i << ", ";
Run Code Online (Sandbox Code Playgroud)

要么

    std::vector<int> v = {1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)

要么

    int v[] = {1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)

等等..

那么什么容器在auto这里使用?

    auto v = {1,2,3,4,5};
    for(auto i : v)
        std::cout << i << ", ";
Run Code Online (Sandbox Code Playgroud)

Bar*_*icz 19

std::initializer_list<int>


不是很难自己检查,你可以随时decltype(v),然后将它与所述列表类型进行比较.

这有另一个不错的属性,有时非常有用,可能会让你感兴趣:

for (auto i : {1,2,3,4,5})
    std::cout << i << ", ";
Run Code Online (Sandbox Code Playgroud)

可以这样做,因为initializer_list保持标准范围界面.

  • 两个小小的评论:严格来说,`initializer_list`不是标准意义上的容器.您的示例有效,因为标准明确定义了基于范围的表单的语句.乍一看,没有类型`initializer_list`的实体.这样的对象是隐含的,所以你必须包含`<initializer_list>`,但你不能"看到"它. (3认同)