C++ 不带Qt3D的QCorBuffer功能

C++ 不带Qt3D的QCorBuffer功能,c++,qt,C++,Qt,QCircularBuffer正是我所需要的,但将Qt3D添加到我们的编译器中会使构建过于膨胀,我是唯一需要它的人,因此我正在寻找一些帮助,以了解如何编写此类功能 QRingbuffer也是一个我不能使用的附加include。这需要在不添加任何新库的情况下完成 我使用C++,我看到了一些想法,但它们总是包括使用QLIST而不限制其大小。 我需要将QList限制为10个条目,一旦添加了第十个条目,旧条目将被覆盖,新条目将被推到前面 例如,如果数组包含[0,1,2,3,4,5,6,7,8,9],我们

QCircularBuffer正是我所需要的,但将Qt3D添加到我们的编译器中会使构建过于膨胀,我是唯一需要它的人,因此我正在寻找一些帮助,以了解如何编写此类功能

QRingbuffer也是一个我不能使用的附加include。这需要在不添加任何新库的情况下完成

我使用C++,我看到了一些想法,但它们总是包括使用QLIST而不限制其大小。 我需要将QList限制为10个条目,一旦添加了第十个条目,旧条目将被覆盖,新条目将被推到前面

例如,如果数组包含[0,1,2,3,4,5,6,7,8,9],我们继续添加元素,我们将看到:

[10,1,2,3,4,5,6,7,8,9]

[11,10,2,3,4,5,6,7,8,9]

[12,11,10,3,4,5,6,7,8,9]

[13,12,11,10,4,5,6,7,8,9]

以下是我目前正在做的事情:

if(list.size() > 10)
    list.push_front(newItem);
else
    list.push_back(newItem);
显然,这并没有限制列表的大小,也没有覆盖最旧的项目,只覆盖第一个


任何帮助都会很好。

如果你想让他们从前面最多推10次,那么我会这样做:

//somewhere higher up (maybe static) int curIndex = 0;
static const int LIST_SIZE = 10;
if(list.size() >= LIST_SIZE) //added an = here to make it 10 elements
{
    list.removeAt(curIndex);
    list.push_front(newItem);
    curIndex = (curIndex + 1) % LIST_SIZE;
}
else
    list.push_back(newItem);

注意:我手头没有一个编译器来测试这一点。

它的可能副本可以很容易地实现循环缓冲区。你想使用QList还是它可能是一个stl库类,比如一个,你不想让它循环,在[10,1,2,3,4,5,6,7,8,9]之后,它会变成[10,11,2,3,4,5,6,7,8,9]而不是[11,10,2,3,4,5,6,7,8,9]我想使用QListNo,我希望新的项目是第一,然后推旧的到右边我忘了你想要的循环类型。现在应该可以了。删除不需要的索引并从头开始添加。谢谢,但这只是将新元素添加到索引0之前。所以[1,2,3]变成了[4,2,3][5,2,3][6,2,3]等等。今天不是我的日子。现在试试。我从未增加过这个值。这基本上就是我所需要的,非常感谢。唯一剩下的问题是当它达到10时,它会在下一次更新时从列表中删除该值,因此[7,8,9][10,8,9]、[11,8,9]、[12,11,9]等。这意味着curIndex可能会关闭1。使用调试器逐步完成它,并查看它在何处擦除10。在if语句中有=对吗?