我正在尝试使用整数数组初始化向量成员变量:
#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)
如何使用整数数组初始化向量?
答案 0 :(得分:5)
我只用std::initializer_list
,因为那是您已经通过的
A(std::initializer_list<int> arr) : mvec(arr)
{
}
答案 1 :(得分:4)
如果出于某种原因您真的想使用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çoisAndrieux 在评论中指出的那样,std::vector
可以使用一对迭代器进行初始化,因此构造函数可以简化为:
template<std::size_t n>
A(const int (&arr)[n]) : mvec(arr, arr + n)
{ }
但是,如果您要初始化,例如std::array
而不是std::vector
,则index_sequence
的trick俩似乎是不可避免的。