我在一个类中有一组 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;
}
我对传递这种对象的最佳实践感到有点困惑,再加上设置我的接收函数以保证不更改原始数据。
我的函数声明是否符合原样,或者我是否需要添加一些最佳实践调整?
最佳答案
您现在拥有的功能与以下功能相同:
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])
{ ... }
};
在这种情况下,成员函数定义必须出现在 header 中(或者,准确地说,该定义必须在调用点对编译器可见)。
如果你想避免对数组语法的丑陋引用,你可以更改 MeasurementData
包含 std::array<std::vector<double>, 3>
的定义而不是普通的 C 数组。然后传递对它的引用更干净
int CStrengthAnalyser::GetBestFit(std::array<std::vector<double>, 3> const& measuredStrengths)
最后,您还可以推断出 std::array
的大小使用如前所示的函数模板。
关于c++ - 将 vector 数组作为函数参数传递(值不会改变),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24039087/