我在一个类中有一组向量:
class MeasurementData
{
private:
std::vector<double> m_measuredStrengths[3];
}
我希望另一个类的函数检查它并根据分析传回一个整数,例如
int CStrengthAnalyser::GetBestFit(std::vector<double> measuredStrengths[3])
{
int bestFit = -1;
// do stuff
return bestFit;
}
我对传递此类对象的最佳做法感到有些困惑,另外还设置了我的接收函数以保证不会更改原始数据。
我的函数声明是否正常,或者我是否需要添加一些最佳实践调整?
答案 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);