我有以下代码:
#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
}
Run Code Online (Sandbox Code Playgroud)
根据文档,push_back API的意思是“在 circle_buffer 的末尾插入一个新元素” -那么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
Run Code Online (Sandbox Code Playgroud)
看起来,如果缓冲区中有0个元素,它将占用第一个元素,但是如果缓冲区中有一个,则将其放在最后
不可以。缓冲区可容纳三个元素,但只能包含一个。
当您进行第一个操作时push_back,您将推到一系列零元素的末尾。因此,新元素成为第一个。
如果您想在建筑上完全填满它,可以这样做!就像使用向量一样:
boost::circular_buffer<int> cb(3, 0);
Run Code Online (Sandbox Code Playgroud)
但后来,你的第一个push_back将仍然改变cb[0],因为它是一个循环缓冲区!这意味着它装满后会缠绕到前面。cb[3]超出范围。没有cb[3]。
否,因为元素已插入缓冲区的末尾。
这是您的空缓冲区:
[ ] [ ] [ ]
Run Code Online (Sandbox Code Playgroud)
调用push_back(1)后看起来像这样:
[1] [ ] [ ]
Run Code Online (Sandbox Code Playgroud)
调用`push_back(2)之后,它看起来像这样:
[1] [2] [ ]
Run Code Online (Sandbox Code Playgroud)
因此,缓冲区的第一个单元格保留值1,第二个值2依此类推。
| 归档时间: |
|
| 查看次数: |
47 次 |
| 最近记录: |