簡體   English   中英

C ++使用帶有Boost循環緩沖區的分配器和初始化器

[英]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_elementsnum_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM