我正在开发一个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中。
答案 0 :(得分:0)
每次复制内容时,您都可以清除list2
。