传递载体的阵列作为函数参数(值不会改变)(Passing array of vectors as a

2019-10-20 05:58发布

我在一类载体的数组:

class MeasurementData
{
private:
    std::vector<double> m_measuredStrengths[3];
}

我想另一个类的功能,以检查和回传整数分析的基础上,如

int CStrengthAnalyser::GetBestFit(std::vector<double> measuredStrengths[3])
{
    int bestFit = -1;
    // do stuff
    return bestFit;
}

而我在最好的做法有点困惑周边通过这种类型的对象,再加上设置了我的接收功能,以保证不改变原始数据。

是我的函数声明OK原样,或者我需要添加一些最佳实践调整?

Answer 1:

你现在所拥有的功能是功能相同:

int CStrengthAnalyser::GetBestFit(std::vector<double> * measuredStrengths )

因此,它绝对可以修改vector秒。 如果你总是使用尺寸为3的数组处理,你可以采取const参考尺寸为3的数组。

int CStrengthAnalyser::GetBestFit(std::vector<double> const (&measuredStrengths)[3])

或者,如果你想让它更通用的:

struct CStrengthAnalyser
{
  // ...

  template<std::size_t N>
  int GetBestFit(std::vector<double> const (&measuredStrengths)[N])
  { ... }
};

在这种情况下,成员函数定义必须出现在报头(或者,更精确地说,定义必须为调用编译器可见)。

如果要避免难看参照数组语法你可以改变MeasurementData定义为包含std::array<std::vector<double>, 3>而不是普通的C数组。 然后使一个参考是清洁器

int CStrengthAnalyser::GetBestFit(std::array<std::vector<double>, 3> const& measuredStrengths)

最后,你也可以推断出的大小std::array使用函数模板如前所示。



Answer 2:

我会建议你使用vector of vectors在这里,像

    vector<vector<double> > your_measure(3);

当你将它传递到另一个函数,你可以使用关键字const吧,像

    my_fun(vector<vector<double> > const & your_vec_vec);


文章来源: Passing array of vectors as a function parameter (values will not change)