将向量数组作为函数参数传递(值不会更改)

tec*_*ble 1 c++ arrays function vector

我在一个类中有一个向量数组:

class MeasurementData
{
private:
    std::vector<double> m_measuredStrengths[3];
}
Run Code Online (Sandbox Code Playgroud)

我想要另一个类的函数来检查它并根据分析传回一个整数,例如

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

我对传递此类对象的最佳做法感到有些困惑,另外还设置了我的接收函数以保证不会更改原始数据.

我的函数声明是否正常,或者我是否需要添加一些最佳实践调整?

Pra*_*ian 6

您现在拥有的功能与以下功能相同:

int CStrengthAnalyser::GetBestFit(std::vector<double> * measuredStrengths )
Run Code Online (Sandbox Code Playgroud)

所以它肯定可以修改vectors.如果您总是处理大小为3的数组,则const可以引用大小为3的数组.

int CStrengthAnalyser::GetBestFit(std::vector<double> const (&measuredStrengths)[3])
Run Code Online (Sandbox Code Playgroud)

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

struct CStrengthAnalyser
{
  // ...

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

在这种情况下,成员函数定义必须出现在标题中(或者,确切地说,定义必须对调用点处的编译器可见).

如果要避免对数组语法的丑陋引用,可以将MeasurementData定义更改为包含std::array<std::vector<double>, 3>而不是普通的C数组.然后传递一个参考是更清洁

int CStrengthAnalyser::GetBestFit(std::array<std::vector<double>, 3> const& measuredStrengths)
Run Code Online (Sandbox Code Playgroud)

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