队列未添加对象-C ++ 11

问题描述 投票:1回答:1

我有两个自定义类,Passenger头文件中包含ElevatorPassenger.h

#include <iostream>
#include <queue>
#include <vector>

using namespace std;

class Passenger
{
    public:

    explicit Passenger(int startTime, int startFloor, int endFloor, int waitTime){
        this->startTime = startTime;
        this->startFloor = startFloor;    
        this->endFloor = endFloor;
        this->waitTime = waitTime;
    }//end constructor

    void increaseWait(int increase){
        this->waitTime += increase;
    }

    int getWait(){
        return this->waitTime;
    }

    int startTime, startFloor, endFloor, waitTime;

}; //end passenger


class Elevator
{
    public:

    explicit Elevator(string the){
        status = "STOPPED";
        passengerCount = 0;
        name = the;        
    }//end constructor

    int addtoQueue(Passenger person){
        if (this->passengerCount < 8){
            this->pickupQueue.push(person);
            return 0;
        }else{
            cout << "Error -- full" << endl;
            return 1;
        } //end

    } //end addtoQueue

    void changePassengerCount(int change){
        passengerCount += change;
    }

    string getStatus(){
        return status;
    }

    void setStatus(string status){
        status = status;
    }

    void addStop(int location){
        stops.push(location);
    }

    int getStops(){
        return stops.size();
    }

    string getName(){
        return name;
    }

    int getRoute(){
        return stops.front();
    }

    bool checkCount(){
        if (passengerCount > 8){
            return false;
        }else{
            return true;
        }
    }

    int printCount(){
        return passengerCount;
    }

    void printQueue(){
        queue<int> copy = stops;

        while(!copy.empty()){
            cout << copy.front() << " ";
            copy.pop();
        }

        cout << endl;
    }

    private:
    string status;
    queue<Passenger> pickupQueue;
    int passengerCount;
    queue<int> stops;
    string name;

}; //end passenger

[我正在将csv文件读入vector对象的Passenger,然后我要做的是用那些queue对象填充每个Elevator对象中的一些Passenger对象。但是,似乎Elevator类中的所有对象实际上都没有更新。例如,passengerCountQueue Size从不超过1。我不知道为什么。

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <sstream>
#include "Passenger.h"
using namespace std;

int time = 0;

int main(){
    vector<Passenger> passengers;
    Elevator elevatorOne = Elevator("elevatorOne");
    Elevator elevatorTwo = Elevator("elevatorTwo");
    Elevator elevatorThree = Elevator("elevatorThree");
    Elevator elevatorFour = Elevator("elevatorFour");
    vector<Elevator> elevators;
    elevators.push_back(elevatorOne);
    elevators.push_back(elevatorTwo);
    elevators.push_back(elevatorThree);
    elevators.push_back(elevatorFour);

    // Code removed when building the vector of passengers by reading in the csv

    for(unsigned int i = 0; i < passengers.size(); i++){
        //cout << "Currently evaluating passenger: " << i << endl;
        for (Elevator currElevator : elevators){
            // If the elevator hasn't moved
            // This is one of three logic checks, but the others have been removed at the request of SO users
            if(currElevator.getStatus().compare("STOPPED") == 0 && currElevator.getStops() == 0 && currElevator.checkCount() == true){                
                // Add the passenger's end floor to the current elevator's queue
                cout << "adding passenger " << i << " to elevator: " << currElevator.getName() << " because of condition 1 " << endl;
                currElevator.addStop(passengers[i].endFloor);
                currElevator.changePassengerCount(1);
                cout << "Queue Size: " << currElevator.getStops() << endl;
                cout << "Passenger Count: " << currElevator.printCount() << endl;
                if(passengers[i].endFloor > currElevator.getRoute()){
                    currElevator.setStatus("MOVING UP");
                } else{
                    currElevator.setStatus("MOVING DOWN");
                }

                break;                     
            } //end if

            else{
                // If none of these conditions match, move on to the next elevator
                continue;
            } //end else
        } //end looping through elevators
    } //end looping through passengers
} //end main

我得到的结果是:

adding passenger 0 to elevator: elevatorOne because of condition 1
Queue Size: 1
Passenger Count: 1
adding passenger 1 to elevator: elevatorOne because of condition 1
Queue Size: 1
Passenger Count: 1
adding passenger 2 to elevator: elevatorOne because of condition 1
Queue Size: 1

但是希望看到:

adding passenger 0 to elevator: elevatorOne because of condition 1
Queue Size: 1
Passenger Count: 1
adding passenger 1 to elevator: elevatorOne because of condition 1
Queue Size: 2
Passenger Count: 2
adding passenger 2 to elevator: elevatorOne because of condition 1
Queue Size: 3
Passenger Count: 3

c++ c++11 stl queue
1个回答
1
投票

为一个愚蠢的问题表示歉意。

© www.soinside.com 2019 - 2024. All rights reserved.