二维动态容器 qt
2 dimensional dynamic container qt
我正在编写kmeans算法。我需要一些 2D 动态容器来存储点组。这里有一些代码
void KMeans::initialPartitionPoints()
{
QTime time = QTime::currentTime();
qsrand((uint)time.msec());
for (int i = 0; i < numberOfClusters(); i++)
{
qint64 randomValue = qrand() % _points->size();
_centroids.push_back(new Centroid(_points->at(randomValue)));
}
for (int i = 0; i < _points->size(); i++)
{
int cluster;
qreal bestDistance = std::numeric_limits<qreal>::max();
qreal distance;
for (int j = 0; j < _centroids.size(); j++)
{
distance = _distanceMeasure->calculateDistance(_centroids.at(j), _points->at(i));
if (distance < bestDistance)
{
bestDistance = distance;
cluster = j;
}
}
WHAT HERE TO STORE i POINT IN j GROUP?
}
}
_centroids
- 是作为组中心的点列表
_points
- 是所有点的列表
现在我怎样才能制作类似 QList< QList<Point*> > _clusters
的东西来将点存储在集群中,其中构造函数中给出了列数并且每列的元素(行)数未知。我的意思是我如何初始化第一个 QList 并设置元素数量,然后如何将第二个 QList 用作动态(自动调整大小)容器(QList::append())
?
cluster
是一个组号,其中_centroids[cluster]
与_clusters[cluster][somePoint]
的这个组相同。
您可以使用
QList< QList<Point*> >
,它将起作用。您需要手动将每个项目逐个添加到所有列表中。
但我认为,如果您不需要在任意位置插入项目并从列表中删除任意项目,您应该使用 QVector 而不是 QList。QVector 可以使用 resize()
轻松调整大小。按索引获取和设置元素的速度更快。内存消耗较低。
此外,请考虑使用 Point
而不是 Point*
作为模板类型。应尽可能使用自动内存管理。
例:
QVector< QVector<Point> > matrix(row_count);
for(int row = 0; row < row_count; i++) {
matrix[row].resize(column_count);
}
//...
matrix[row][column] = some_value;
相关文章:
- 在Qt C++单元测试中动态加载QQuickWindow而不是QQuickWidget
- 静态链接MSVC库,动态链接Qt
- 当我使用 GUI 开发 QT 动态库时,如何查看我的 QT UI?
- 如何在Qt中处理子类中的动态内存分配
- Qt测试模拟动态链接库
- 是否可以动态翻译QT应用程序而无需复制代码
- QT MetaObject从单独的动态库进行检查
- QT Quick (QML) assemble mac-.bundle -> 不是使用 macdeployqt 时的动态库错误
- 如何在Qt中最好地存储动态创建的小部件的数据
- Qt:如何调整QGraphicsItem以动态更改大小
- 是否可以在Qt中同时使用静态和动态库
- 我动态添加一个按钮,如何在Qt的另一个空白中使用此按钮
- 哪个UI项允许在Qt中随时随地动态扩展
- Qt 动态创建 QWidget from QString.
- Qt动态创建布局并向布局添加小部件
- 带有用户界面编译器的Qt动态样式表
- Qt - 动态绘制结果
- QT:动态子按钮不可见
- Qt动态显示文本文件
- 更改 Qt 动态属性的值时的调用方法