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

时间:2014-06-04 13:41:37

标签: c++ arrays function vector

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:6)

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

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

所以它肯定可以修改vector。如果您始终处理大小为3的数组,则可以对大小为3的数组进行const引用。

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的大小,如前所示。

答案 1 :(得分:0)

我建议你在这里使用vector of vectors,例如

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

当您将其传递给另一个函数时,您可以使用关键字const,例如

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