我在一类载体的数组:
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原样,或者我需要添加一些最佳实践调整?
你现在所拥有的功能是功能相同:
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
使用函数模板如前所示。
我会建议你使用vector of vectors
在这里,像
vector<vector<double> > your_measure(3);
当你将它传递到另一个函数,你可以使用关键字const
吧,像
my_fun(vector<vector<double> > const & your_vec_vec);