元组(x1,y1),(x2,y2),...的向量或单独的向量(x1,x2,...),(y1,y2,...)

时间:2018-08-01 13:25:11

标签: c++ qt plot data-structures

我正在寻找一种实用且“好的”面向对象的C ++-Qt方法,以元组(xi,yi)的形式表示data

x  | y
=======
x1 | y1
x2 | y2
 . | .
xn | yn

将通过 reference 在我的应用程序中的某些位置提供。该data将在给定的时间间隔内重复绘制,在此间隔内其他功能可能会访问data参考并对其进行修改,从而使更改显示在下一个绘制的“帧”中。

绘图工具(QCustomPlot)要求xy列为QVector<double>。在设计的早期阶段,我做了类似(伪代码)的事情:

class TupleXY {
    double x;   // xi
    double y;   // yi
};

用于QVector<TupleXY> data;

在出现了xy列/向量的需求后,(*),当我决定去QCustomPlot时,我介绍了(版本1):

class DataXYv1 {
    QVector<TupleXY> data; //with direct access
    QVector<double> getX() const {
        QVector<double> result;
        result.reserve(data.size());
        foreach(TupleXY xy in data)
            result[i] = xy.x;
        return result;
    }
    QVector<double> getY() const {//analogous}
};

但是,这不是准备绘制数据的效率很低的方法吗?这必须对每一帧都执行!

自然地,我创建了一个类(版本2):

class DataXYv2 {
    QVector<double> x;
    QVector<double> y;
    void addTuple(TupleXY xy) {x.append(xy.x); y.append(xy.y);}
    TupleXY& getTuple(int index) {
        if (index is valid)
            return TupleXY(x[index], y[index]) //these have to be references in order to workf or data manipulation...
        end
    }
    ...
};

直接传递x-和y-向量。

但是,这种设计使遍历数据点(xi,yi)的向量更加麻烦,(xi,yi)对仅通过各自向量中的位置进行映射,向量的等长长度不能容易保证,并且由于数据具有可供参考,因此无法保证正确的映射...

1)以上版本之一是首选/更典型的处理方式吗?这似乎是一个微不足道的情况,但是我无法决定如何创建这样的数据结构... 2)例如,您将如何实现所需的功能(存储多个(xi,yi)数据点,提供直接的引用访问权限以及获得x和y向量的可能性)?

(*)我不认为逐点添加元组是有效的...

0 个答案:

没有答案