传递包含数字的数组作为参数c ++

时间:2019-01-16 16:57:46

标签: c++ class

我有一个带有带有三个参数的构造函数的类

class Foo{
public: Foo(int, double[], double[]);
};

Foo::Foo(int a, double b[], double c[]){
// function
}

现在我要尝试的是使用具有固定数字的数组来调用此类 例如

Foo(4, [4.1, 2.5, 7.2], [5.5, 6.1, 3.8]);

但是这不起作用。这样的语法在c ++中是否可行,还是必须更改?

我尝试通过在喜欢之前声明数组变量来完成它

 double x[5];
 x[0] = 4.1;
 x[1] = 2.5;
 x[2] = 7.2;

 Foo(4, x, x);

这可行,但要花很多时间,因为我想创建多个此类,如果有更好的方法,这会使我的代码变得更大且不必要。

预先感谢

3 个答案:

答案 0 :(得分:4)

我建议使用标准库容器:

class Foo{
   public:
     Foo(int, const std::vector<double>& vv ) : v(vv) 
     {
       // other stuff here
     }

     std::vector<double> v;
};

您可以使用aggregate initialization通过这种方式传递值:

int main()
{
    Foo f( 1, {1.1,1.2,1.3} );
}

如果编译时大小固定,则使用std::array

答案 1 :(得分:2)

在这种情况下,std::initializer_list是最佳选择。

class Foo{
public:
    Foo(int n, std::initializer_list<double> a, std::initializer_list<double> b);
};

Foo foo { 32, {}, { 2, 3, 1, 2 }};

Live example

答案 2 :(得分:1)

使用[]声明列表将不起作用。但是您可以使用brace enclosed initializer lists

double b[] = {1.0, 2.0};
double c[] = {5.3, 4.7};
Foo f = Foo(1, b, c);

但是请注意,您不能这样做:

Foo f = Foo(1, {1.0, 2.0}, {5.3, 4.7});

为什么?因为初始化列表无法将内联转换为数组。您必须显式声明数组。如果要内联执行此操作,请使用std::vector<double>