![](/img/trans.png)
[英]Using scoped `polymorphic_allocator` with `boost::circular_buffer` fails
[英]C++ Using allocator and initializer with boost circular buffer
我試圖弄清楚如何使用以下構造函數進行boost :: circular_buffer:
circular_buffer(capacity_type buffer_capacity, size_type n, const_reference item, const allocator_type& alloc = allocator_type());
我有一個自定義類:
template<class T> class Custom
{
public:
Custom() :
time(0.0)
{}
double time;
T data_;
};
使用構造函數定義的循環緩沖區僅占用一個容量:
boost::circular_buffer<Custom<T>> buffer(10);
我在分配器上工作不多,我想在構造時使用默認/空/零值來初始化我的緩沖區,似乎上面提到的構造函數是使用boost :: circular_buffer進行處理的方法,但是我不是完全確定如何使用boost構造函數。 如果它是一個普通矢量,我認為我可以執行以下操作:
int num_elements = 10;
Custom<T> custom;
std::vector<Custom<T>> buffer(10, custom);
我確實找不到關於此的任何示例,因此感謝您的幫助或指導。
就像您在std::vector
調用中未為Custom
指定分配器並使用默認值一樣,您可以使用boost::circular_buffer
進行相同的操作。 唯一的區別是boost::circular_buffer
有一個額外的參數,允許您同時設置緩沖區中默認構造對象的容量和數量。 這意味着如果您想要一個完整的boost::circular_buffer
那么您將使用:
int num_elements = 10;
Custom<T> custom;
boost::circular_buffer<Custom<T>> buffer(num_elements, num_elements, custom);
這給你一個boost::circular_buffer
,它的容量為num_elements
, num_elements
默認分配了num_elements
對象。
您還可以擁有:
boost::circular_buffer<Custom<T>> buffer(num_elements, num_elements/2, custom);
num_elements
容量設置為num_elements
但僅使用默認分配的對象填充緩沖區的一半( num_elements/2
)。
確實,您必須使用其他分配器的唯一原因是,如果您希望分配器使用與默認分配器不同的分配方案(它如何在系統中實際分配內存)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.