У меня есть пользовательский контейнер 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
, используя итератор, который я объявил в первом заголовочном файле?