我正在寻找一种实用且“好的”面向对象的C ++-Qt方法,以元组(xi,yi)的形式表示data
:
x | y
=======
x1 | y1
x2 | y2
. | .
xn | yn
将通过 reference 在我的应用程序中的某些位置提供。该data
将在给定的时间间隔内重复绘制,在此间隔内其他功能可能会访问data
参考并对其进行修改,从而使更改显示在下一个绘制的“帧”中。
绘图工具(QCustomPlot
)要求x
和y
列为QVector<double>
。在设计的早期阶段,我做了类似(伪代码)的事情:
class TupleXY {
double x; // xi
double y; // yi
};
用于QVector<TupleXY> data;
。
在出现了x
和y
列/向量的需求后,(*),当我决定去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向量的可能性)?
(*)我不认为逐点添加元组是有效的...