Итерация через пользовательский контейнер пользовательских контейнеров - PullRequest
0 голосов
/ 14 января 2020

У меня есть пользовательский контейнер UniqueArray. Это заголовочный файл:

using namespace std;
template <class Element, class Compare = std::equal_to<Element>>
class UniqueArray {

public:
    Element** data;
    unsigned int curr_size;
    unsigned int max_size;
    int* availability_array;

    explicit UniqueArray(unsigned int size);
    UniqueArray(const UniqueArray& other);
    ~UniqueArray();
    UniqueArray& operator=(const UniqueArray&) = delete;
    unsigned int insert(const Element& element);
    bool getIndex(const Element& element, unsigned int& index) const;
    const Element* operator[] (const Element& element) const;
    bool remove(const Element& element);
    unsigned int getCount() const;
    unsigned int getSize() const;

    class Filter {
    public:
        virtual bool operator() (const Element&) const = 0;
    };
    UniqueArray filter(const Filter& f) const;

    class UniqueArrayIsFullException{};

    typedef Element** ua_iterator;
    typedef const Element** ua_const_iterator;

    ua_iterator begin(){
        return data;
    }
    ua_const_iterator begin() const {
        return data;
    }
    ua_iterator end(){
        return data + max_size;
    }
    ua_const_iterator end() const {
        return data + max_size;
    }
};

Теперь этот контейнер позже используется в большем контейнере, который называется ParkingLot, и вот заголовочный файл:

using namespace ParkingLotUtils;
using std::ostream;

namespace MtmParkingLot {


    class ParkingLot {
    public:

        UniqueArray<Vehicle, Vehicle::compareVehicles> motorbike_parking;
        UniqueArray<Vehicle, Vehicle::compareVehicles> car_parking;
        UniqueArray<Vehicle, Vehicle::compareVehicles> handicapped_parking;

        ParkingLot(unsigned int parkingBlockSizes[]);
        ~ParkingLot() = default;
        ParkingResult enterParking(VehicleType vehicleType, LicensePlate licensePlate, Time entranceTime);
        ParkingResult exitParking(LicensePlate licensePlate, Time exitTime);
        ParkingResult getParkingSpot(LicensePlate licensePlate, ParkingSpot& parkingSpot) const;
        void inspectParkingLot(Time inspectionTime);
        friend ostream& operator<<(ostream& os, const ParkingLot& parkingLot);
        int calculateFee(Time entryTime, Time exitTime, VehicleType type);
        int calculateFeeRecursive(Time entryTime, Time exitTime, VehicleType type, int iter, int totalPrice);
        bool isVehicleInLot(LicensePlate licensePlate, VehicleType& type, unsigned int& index);
    };
}

Я вполне застрял при попытке перебрать весь ParkingLot. Это то, что я написал до сих пор, не уверенный в том, как продолжить:

    void ParkingLot::inspectParkingLot(Time inspectionTime) {
        std::vector<UniqueArray<Vehicle, Vehicle::compareVehicles>> ParkingLotVector = {motorbike_parking, car_parking, handicapped_parking};
        std::vector<UniqueArray<Vehicle, Vehicle::compareVehicles>>::iterator ParkingLotIterator;
        for(ParkingLotIterator = ParkingLotVector.begin(); ParkingLotIterator < ParkingLotVector.end(); ParkingLotIterator++){
            for(/*stuck*/)
        }
    }

На первом для l oop я перебираю UniqueArrays внутри вектора. Как я могу перебрать Element в каждом из этих UniqueArrays, используя итератор, который я объявил в первом заголовочном файле?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...