gpt4 book ai didi

c++ - "Deque iterator not dereferencable"错误

转载 作者:行者123 更新时间:2023-11-28 04:20:00 24 4
gpt4 key购买 nike

我正在尝试遍历双端队列并删除到达时间最小的元素。该函数在前几次工作,然后给我“迭代器不可取消引用”错误并停止工作。

我的Processor.h:

#pragma once

#include <deque>
#include "Job.h"
#include <ctime>

using namespace std;

class Processor {
public:
deque<Job> priorityQueue;
Job runningJob;
bool isProcessing;
int processingTime;
int runningTime;
int overallJobs;
int numJobs[4]; //0 is A, 1 is B, 2 is C, 3 is D
int runningJobNumber;
int interruptedJobs;

Processor();

void simulate();

Job findNextJob();
};

我的findNextJob():

Job Processor::findNextJob() {
Job nextJob = priorityQueue.front();

deque<Job>::const_iterator iter = priorityQueue.begin();
deque<Job>::const_iterator location;

while (iter <= priorityQueue.end()) {
if (iter->arrivalTime < nextJob.arrivalTime) {
nextJob = *iter;
location = iter;
iter++;
}
else {
iter++;
}
}

priorityQueue.erase(location);

return nextJob;
}

最后,我调用函数的地方:

void Processor::simulate() {
srand(time(NULL));

char newJobType;

while (processingTime <= 50) {
newJobType = 65 + rand() % 4;
Job newJob(newJobType);
newJob.arrivalTime += runningTime;

processingTime += newJob.processingTime;

priorityQueue.push_back(newJob);
cout << endl << newJob.type << " " << newJob.arrivalTime;
runningTime++;
}
runningTime = 0;

int jobFinishTime;
Job nextJob;

nextJob = findNextJob();

while (priorityQueue.size()) {
cout << endl << runningTime << ") " << "Queue size: " << priorityQueue.size();
if (!isProcessing) {
cout << " CPU 1 Idle;";

if (nextJob.arrivalTime == runningTime) {
runningJob = nextJob;

//irrelevant code here

nextJob = findNextJob();
}
}

if (isProcessing && (runningJob.arrivalTime + runningJob.processingTime) != runningTime) {

//irrelevant code here

if (nextJob.arrivalTime <= runningTime) {
runningJob = nextJob;

//irrelevant code here

nextJob = findNextJob();
}
}
if (nextJob.priority > runningJob.priority && nextJob.arrivalTime <= runningTime) {
//irrelevant code here
}



runningTime++;
}



}

findNextJob() 成功运行了两到三次,然后给出了错误。任何帮助将不胜感激。

最佳答案

在 C++ 中,结束迭代器“指向”最后一个元素之后的一个。

findNextJob 允许迭代器 iter 变得等于 priorityQueue.end(),因此取消引用它是无效的。

while (iter <= priorityQueue.end()) {
// ...
}

关于c++ - "Deque iterator not dereferencable"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55669716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com