我最初使用矢量存储“传入项目”,但即使有大量RAM也不实用。因此,我决定存储最后收到的X项。
最好的数据结构是什么?我在想一个std :: queue?这是我想到的伪代码:
if(queue.size() == max_size){
queue.pop()
}
queue.push(new_item);
数据结构的用法是存储事件的历史记录,如果使用的话,将是回滚 - 因此迭代结构中的每个项目。
答案 0 :(得分:8)
我使用ring buffer数据结构。 C ++ STL没有提供一个,但它是微不足道的。您只需要一个固定大小的数组和一个索引。
这是一个示例实现,类似于我使用的实现:
#include <iostream>
template <typename T, size_t TSize>
struct RingBuffer{
enum{array_size = TSize+1};
T array[array_size];
size_t read;
size_t write;
RingBuffer():read(0),write(0){}
T& pop(){
T* p = NULL; //Return NULL reference if empty intentionally
if(read!=write){
p=array+read;
read = (read+1)%array_size;
}
return *p;
}
bool is_empty(){return write==read;}
bool is_full(){return (write+1)%array_size == read;}
void push(T& v){
array[write]=v;
write = (write+1)%array_size;
//Gracefully handle write overflow
if(write==read)read=(read+1)%array_size;
}
};
int main(int argc, const char * argv[])
{
RingBuffer<int, 10> r;
for(int i=0;i<15;++i) r.push(i);
while (!r.is_empty()) std::cout<<r.pop()<<"\n";
return 0;
}
答案 1 :(得分:0)
尝试deque,IMO这就是你要搜索的内容:
答案 2 :(得分:0)