【发布时间】:2012-03-19 23:27:14
【问题描述】:
我想要一个简单而高效的循环缓冲区/队列。如果我使用std::vector,我必须这样做:
if ( v.size() >= limit ) {
std::vector<int> it = v.begin();
v.insert( it, data );
v.erase( it+1 );
}
有没有更简单的解决方案?
【问题讨论】:
-
我不明白你的问题...你想用 std:vector 实现一个循环列表吗?
-
没有。这是我使用 std::vector 的实现。然而,这不是一个好看的主意。插入然后删除以保持大小固定...
-
删除元素的第一件事不会使用
delete,但可能会使用erase,而且我看不到如何在一个位置替换元素(这是上面解释的代码的净效果作为伪代码,即忽略插入后使用迭代器的未定义行为)将有助于我构建循环缓冲区。您可能是想从头部移除并在尾部插入? -
顺便说一句,你有一个错误:
insert可能会使迭代器it无效,因此erase可能会崩溃或损坏内存。
标签: c++ vector circular-buffer circular-list