简要说明:我写了一个程序,实现了一个有一个出纳员的银行的事件驱动模拟。程序从到达和交易时间的输入文件中读取数据。文件的每一行包含客户的到达时间和所需的交易时间。
我的问题:如果来自输入文件的到达事件未按升序排序,我希望程序打印哪个客户无序。为此,我创建了一个向量并将所有到达事件存储到向量中并执行此操作:
vector<int>::iterator i;
i = is_sorted_until(myVector.begin(), myVector.end());
if (i != myVector.end())
cout << "The customer out of order is: " << (i - myVector.begin()) << endl;
问题是输入文件如下所示:
3 5
7 4
10 5
8 2
12 9
如果您注意到,第一列中的第四位客户发生故障。
当程序运行时,输出为:
在时间处理到达事件:3
向量的大小 是:1
当时处理到达事件:7
。的大小 向量是:2
在时间处理出发事件:8
在时间处理到达事件:10
向量的大小 是:3
当时处理到达事件:8
。的大小 向量是:4
客户乱序是:3
处理一个 到达事件的时间:12
向量的大小是:5
客户故障是:3
按时处理出发事件: 12
当时处理出发事件:17
处理a 出发事件的时间:19
当时处理出发事件: 28
如果您注意到,它表示客户无序是第三个客户,那是因为在处理到达事件时,向量中只有4个元素(3,7,10,5)。
有没有办法将所有到货事件添加到向量中,然后检查其中是否有任何故障,以免第四个客户出现故障?
答案 0 :(得分:0)
第四个客户将进入myVector [3]。 vector
的{{1}}大小n
从0
升级到n-1
。
请注意*i == myVector[i-myVector.begin()]
和*myVector.begin() == myVector[0]
,因此您可以使用该等式有效地计算客户的索引。