【问题标题】:Remove old values in list and add new ones删除列表中的旧值并添加新值
【发布时间】:2013-08-28 11:52:06
【问题描述】:

我真的不确定如何正确解释这一点,但让我试试。我有一个 C++ 程序正在侦听 CAN 总线(车辆通信总线)上的数据。每隔 1 秒,我就会从总线上收到一条新消息,其中包含有关错误消息的诊断信息。消息不是固定长度的,所以消息一次可能包含5个故障,下一次可能包含3个故障。消息来自两个(或多个)不同的来源,每个来源每 1 秒发送一次。在我的 UI 中,我需要以每 5 秒 1 次的速度循环显示活动故障列表。

这是我的问题。如何有效地使用最新信息更新列表?添加到列表中没有问题,但是如何删除不应再出现在列表中的项目?换句话说,如果我在消息中只收到 3 个错误,这意味着其中 2 个不再存在。我唯一能想到的是使用时间戳和一堆 for 循环来比较 2 条消息并添加/删除/更新列表。对于这类事情,是否已经存在更有效的方法?

编辑:为了澄清,我需要从列表中删除项目,因为这些故障不再有效。如果我有一个数组如下:

// Message that is received: (psudo code)
Fault newFaults1[5] { Fault1, Fault2, Fault3, Fault4, Fault5 };
Fault newFaults2[7] { Fault1, Fault2, Fault3, Fault4, Fault5, Fault6, Fault7 };

// Populate the array that holds both array values
for (int i = 0; i  < newFaults1.Count(); i++)
    Faults[i] = newFaults1[i];

for (int i = 0; i < newFaults2.Count(); i++)
    Faults[i + newFaults1.Count()] = newFaults2[i];

// Now, the next time a message is received, there are fewer faults.
Fault newFaults1[2] { Fault1, Fault2 };
Fault newFaults2[1] { Fault1 };

// TODO: How do I remove all of the old items in the Faults array?

【问题讨论】:

  • 听起来是个有趣的问题,但我不明白从列表中删除项目的标准。你的解释不是很清楚。
  • 如果一条消息被添加然后快速删除(在 5 秒内),它是否还应该至少显示一次?
  • 确实,标准不明确。另外,您说其中 2 个不再存在;是不是因为你收到新的时清单里有 5 件?
  • @john:我编辑了我的问题以添加更多细节。这有意义吗?
  • @ilent2:不,如果它发生得那么快就不需要显示。另外,我更新了我的问题以澄清一些事情。

标签: c++ qt list queue


【解决方案1】:

好的,我认为问题可能比最初出现的要简单得多。您的问题似乎是关于如何调整数组的大小?

简单的答案是不要使用数组,而是使用std::vector。例如

#include <vector>
std::vector<Fault> faults;

// add a fault to vector
faults.push_back(f);

// remove all faults from vector
faults.clear();

// resize the faults vector
faults.resize(2);

// get size of vector
num = faults.size();

// loop through all faults
for (i = 0; i < faults.size(); ++i)
{
    f = faults[i];
    // do something with f
}

如果我误解了,请道歉。

【讨论】:

    【解决方案2】:

    目前还不是很清楚。如果您收到的新故障代表当前状态,那么您只需清除旧数组,并将新故障推入其中,例如:

    onNewFaultsReceived(Faults *faults) {
        clear old Faults array;
        insert faults into Faults array
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 2015-11-06
      • 2012-11-21
      • 2022-08-05
      • 2012-09-17
      相关资源
      最近更新 更多