如何仅将新添加的元素复制到std :: deque中

时间:2017-12-12 14:32:57

标签: c++ multithreading synchronization producer-consumer

我正在开发一个C ++项目,我需要计算std :: deque数据的平均值。这是我到目前为止所写的内容

std::deque<float> list1(200,0);
std::deque<float> list2;
pthread_mutex_t mut;


/*thread1 populates list2 say every 50 milliseconds*/
while(true)
{
    float f;
    ... //some operation
    pthread_mutex_lock(&mut);
    list2.push_back(f);
    if(list2.size()==201)
        list2.pop_front();
    pthread_mutex_unlock(&mut);

}

/*thread2 copies list2 data into list1 every 1 second*/
while(true)
{
    pthread_mutex_lock(&mut);
    if(list2.size()==200)
       std::copy(list2.begin(),list2.end(),std::back_inserter(list1.begin()));
    pthread_mutex_unlock(&mut);

    if(list1.size()==200)
    {
        float sum=std::accumulate(list1.begin(),list1.end(),0.0f);
        float avg=sum/list1.size();
    }

}

正如你所看到的那样,每隔1秒我就会将相同的旧数据(除了最后20个元素)复制到list1中,我感觉不是最佳的。那么有没有办法优化这段代码,以便我最后只将list2中新添加的元素复制到list1中。

1 个答案:

答案 0 :(得分:0)

每次复制内容时,您都可以清除list2