如果我理解正确,您希望在给定时间范围内拥有最小值和最大值。您使用的解决方案保持程序开始以来的最小值和最大值。
根据您的需要,您有几种解决方案:例如,您可以不时重置最小值和最大值,就像@dirkgently 建议的那样。如果您想要一个移动范围,以便在任何时间点都有n
最后一次测量的最小值和最大值,那么您将不得不使用更复杂的解决方案。我唯一能想到的是将测量值保存在 FIFO 容器中:
std::deque<int> lastRawXs;
const int frameSize = 100; // only keep the last 100 measures
while (true)
{
// Keeps generating new RawX,Y and Z values
Function(&RawX, &RawY, &RawZ);//
if (lastRawXs.size() >= frameSize)
{
lastRawXs.pop_front();
}
lastRawXs.push_back(RawX);
typedef std::deque<int>::const_iterator iterator;
std::pair<iterator, iterator> minMaxRawX =
boost::minmax_element(lastRawXs.begin(), lastRawXs.end());
Output("MinRawX:%0.2f", *minMaxRawX.first);
Output("MaxRawX:%0.2f", *minMaxRawX.second);
}
编辑:这是使用循环缓冲区的替代(更好)解决方案:
const int frameSize = 100;
std::circular_buffer<int> lastRawXs(frameSize);
while (true)
{
Function(&RawX, &RawY, &RawZ); // keeps generating new RawX,Y and Z values
lastRawXs.push_back(RawX); // overwrites old measures if buffer is full
typedef std::circular_buffer<int>::const_iterator iterator;
std::pair<iterator, iterator> minMaxRawX =
boost::minmax_element(lastRawXs.begin(), lastRawXs.end());
Output("MinRawX:%0.2f", *minMaxRawX.first);
Output("MaxRawX:%0.2f", *minMaxRawX.second);
}