【发布时间】:2021-10-26 03:15:42
【问题描述】:
我有以下代码:
#include "boost/circular_buffer.hpp"
int main()
{
// Create a circular buffer with a capacity for 3 integers.
boost::circular_buffer<int> cb(3);
// Insert threee elements into the buffer.
cb.push_back(1);
int a = cb[0]; // a == 1
}
根据文档 push_back API 的意思是 “在循环缓冲区的末尾插入一个新元素” - 那么 cb[0] 如何为 1? cb[2] 不应该存储值 1 吗?
========================================更新======= =======================
// Insert threee elements into the buffer.
cb.push_front(11);
cb.push_back(2);
cb.push_back(3);
int a = cb[0]; // a == 11
int b = cb[1]; // b == 2
int c = cb[2]; // c == 3
似乎如果缓冲区中有 0 个元素,它会占用第一个元素,但如果有一个元素,则将其放在最后
【问题讨论】:
-
你想太多了。
push_back的行为是一致的,并不取决于有多少元素开始。它在逻辑结尾加一,句号。我认为您只是误解了“开始”和“结束”在这种情况下的含义。