我正在尝试用整数数组初始化向量成员变量:
#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::vector
,index_sequence
技巧似乎是不可避免的。