为什么提升circular_buffer存储我的布尔值?

Why doesn't boost circular_buffer store my booleans?

本文关键字:存储 我的 布尔值 buffer circular 为什么      更新时间:2023-10-16

这段简单的代码向循环缓冲区添加了2个bools。

boost::circular_buffer<bool> stuff;
stuff.push_back(false);
stuff.push_back(true);
cout << stuff.size() << endl; // prints 0

不幸的是,似乎没有添加任何对象,并且size()为零。有人能帮我找出原因吗?

您不设置circular_buffer的容量。

根据文件

现在构造函数不分配任何内存,并且容量和大小都设置为零。还要注意,当将元素插入到容量为零的circular _buffer中时(例如,通过push_back(const_reference)或insert(迭代器,value_type)),将不会插入任何元素,并且大小(以及容量)保持为零。

因此,您应该这样构造缓冲区:

size_t const BUFFER_CAPACITY(1024); // Whatever is appropriate
boost::circular_buffer<bool> stuff(BUFFER_CAPACITY);

另一种选择是在施工后使用set_capacity(...)方法:

boost::circular_buffer<bool> stuff;
// ...
size_t BUFFER_SIZE(1024); // Whatever is appropriate
stuff.set_capacity(BUFFER_CAPACITY);

Nevermind,我忘记指定缓冲区的容量。不过,Boost让我逍遥法外,这很烦人。