c++ - 将 vector 数组作为函数参数传递(值不会改变)

标签 c++ arrays function vector

我在一个类中有一组 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/

相关文章:

c++ - 声明二维字符数组并传递字符串?

c++ - 对象和数据成员内存地址困惑

c++ - 在函数中将数组作为参数传递

arrays - Powershell搜索文本文件以进行匹配,并在行尾添加回车符

arrays - 使用包含标志的值数组(splat)调用cmdlet

c++ - Windows API 从文件渲染图像(初学者)

c++ - C++中局部变量和返回变量的构造和析构

c# - C#中的字节操作

c++ - C++ 中的参数和函数

c# - Unity中的随机数组