【问题标题】:Class function that takes min or max value of array of type *this获取 *this 类型数组的最小值或最大值的类函数
【发布时间】:2017-12-02 21:25:14
【问题描述】:

假设我有一个名为particle的类:

class particle {
public:
    void set_values(double x, double y) {
        x_val = x;
        y_val = y;
    }
    double X() { return x_val; }
    double Y() { return y_val; }
private:
    x_val, y_val;
};

现在假设我有一个类型粒子数组,里面有 3 个对象粒子:

int main(){
    particle p1;
    particle p2;
    particle p3;
    p1.set_values(3,1);
    p2.set_values(2,4);
    p3.set_values(1,5);
    part array_part[3] = {p1, p2, p3};
    return 0;
}

现在我的问题是: 如何在类中创建一个函数,该函数采用 array_part 并返回它的 X() 或 Y() 值的最大值或最小值? 当然,我可以在课堂外通过用例如填充一个新数组来做到这一点。所有 X() 值并使用 c++ 函数 min_element。对于最小值,此代码如下所示:

double array_x[3] = {p1.X(), p2.X(), p3.X()};
double X_min =  *min_element(array_x, array_x
    + sizeof(array_x)/sizeof(*array_x));

X_min 现在将 = 1。 但是如何在课堂内而不用写太多的主要内容呢?我真的不知道如何开始。

【问题讨论】:

  • 将 std::minmax_element 与 lambdas 一起使用
  • 您的类不包含数组,因此您不能使用this 指针 - 您可以编写一个static 辅助函数,该函数将数组作为参数并找到最小值。此外,您应该更喜欢 std::vectorstd::array 而不是原始数组
  • main 函数中的part 是什么? return 语句之前的行。我认为应该是particle

标签: c++ arrays class


【解决方案1】:

此代码未遵循最佳软件工程实践,但如果您想要通过这种方式获得某些东西,您可以按照以下方式进行操作

class Particle {
public:
    void set_values(double x, double y) {
        x_val = x;
        y_val = y;
    }
    double X() { return x_val; }
    double Y() { return y_val; }

    // If you need minimun Y, change the X for Y on the function.
    double get_min_x(Particle* particles, int n){
        double minimun = particles[0].X();
        for(int i = 0; i < n; i++){
            if(particles[i].X() < minimun){
                minimun = particles[i].X();
            }
        }
        return minimun;
    }
private:
    double x_val, y_val;
};

考虑到Particle array_part[3] = {p1, p2, p3};,您可以这样做

p1.get_min_x(array_part, 3)

当你为一个类建模时,想一想:粒子知道什么?粒子有什么作用?粒子是否知道哪个粒子的 x 或 y 最小?我觉得不行!

【讨论】:

  • 为什么要从double转换成float?
  • @mistapink 我忘了它是双倍的,因为我曾经使用浮点数作为坐标。
猜你喜欢
  • 1970-01-01
  • 2014-05-10
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多