C++如何从值列表初始化向量成员



我正在尝试用整数数组初始化向量成员变量:

#include <vector>
#include <iostream>
struct A
{
    A(int arr[]) : mvec(arr)
    { }
    std::vector<int> mvec;
};
int main()
{
    A s({1,2,3});
}

编译给我错误:

$ c++ -std=c++11 try59.cpp
try59.cpp:15:12: note: candidates are:
try59.cpp:6:1: note: A::A(int*)
 A(int arr[]) : mvec(arr)

如何使用整数数组初始化矢量?

我只会使用std::initializer_list,因为这是您已经通过的内容

A(std::initializer_list<int> arr) : mvec(arr)
{
}

如果出于某种原因,您真的想使用C样式数组而不是std::initializer_list初始化向量,那么可以使用附加的间接级别:

struct A {
    template<std::size_t n>
    A(const int (&arr)[n]) :
        A(arr, std::make_index_sequence<n>{})
    { }
    template<std::size_t... is>
    A(const int (&arr)[sizeof...(is)], std::index_sequence<is...>) :
        mvec{arr[is]...}
    { }
    std::vector<int> mvec;
};
A a({1, 2, 3});

编辑正如François Andrieux在评论中指出的那样,std::vector可以使用一对迭代器进行初始化,因此构造函数简化为:

template<std::size_t n>
A(const int (&arr)[n]) : mvec(arr, arr + n)
{ }

但如果您正在初始化,例如std::array而不是std::vectorindex_sequence技巧似乎是不可避免的。

最新更新