如何返回多个矢量对象的平均值? C ++

时间:2018-10-25 22:11:00

标签: c++

嗨,我对C ++还是很陌生,但是我有一个项目,但是要做一个项目,但是这个项目中的一个问题要求我添加一个函数getAverageCostPerDay(),该函数采用一个Reservations对象的向量,并返回a汽车预订。我如何做到这一点?谢谢

Reservation.h

#pragma once
#include <string>

class Reservation
{
    private:
        int id;
        std::string name;
        int stDate;
        int stMonth;
        int stYear;
        int duration;
        float cost;
        std::string licensePlate;

        static int reservationCount;

public:
    //Constructor
    Reservation();

    Reservation(int id, std::string name, int stDate, int stMonth, int
    stYear, int duration, float cost, std::string licensePlate);

    //Destructor
    ~Reservation();

    //Getters
    int getId();
    std::string getName();
    int getStDate();
    int getStMonth();
    int getStYear();
    int getDuration();
    float getCost();
    std::string getLicensePlate();

    //Setters
    void setId(int id);
    void setName(std::string name);
    void setStDate(int stDate);
    void setStMonth(int stMonth);
    void setStYear(int stYear);
    void setDuration(int duration);
    void setCost(float cost);
    void setLicensePlate(std::string licensePlate);

    static int getReservationCount()
    {
        return reservationCount;
    }
};

Reservation.cpp

#include "pch.h"
#include "Reservation.h"

int Reservation::reservationCount = 0;

//Constructor
Reservation::Reservation()
{
    this->id = 0;
    this->name = "";
    this->stDate = 0;
    this->stMonth = 0;
    this->stYear = 0;
    this->duration = 0;
    this->cost = 0;
    this->licensePlate = "";
    reservationCount++;
}

Reservation::Reservation(int id, std::string name, int stDate, int stMonth, 
int stYear, int duration, float cost, std::string licensePlate)
{
    this->id = id;
    this->name = name;
    this->stDate = stDate;
    this->stMonth = stMonth;
    this->stYear = stYear;
    this->duration = duration;
    this->cost = cost;
    this->licensePlate = licensePlate;
    reservationCount++;
}

//Destructor
Reservation::~Reservation()
{
    reservationCount--;
    std::cout << "Destroying (" << this->name << ")" << std::endl;
}

//Getters
int Reservation::getId()
{
    return this->id;
}

std::string Reservation::getName()
{
    return this->name;
}

int Reservation::getStDate()
{
    return this->stDate;
}

int Reservation::getStMonth()
{
    return this->stMonth;
} 

int Reservation::getStYear()
{
    return this->stYear;
}

int Reservation::getDuration()
{
    return this->duration;
}

float Reservation::getCost()
{
    return this->cost;
}

std::string Reservation::getLicensePlate()
{
    return this->licensePlate;
}

//Setters
void Reservation::setId(int id)
{
    this->id = id;
}

void Reservation::setName(std::string name)
{
    this->name = name;
}

void Reservation::setStDate(int stDate)
{
    this->stDate = stDate;
}
void Reservation::setStMonth(int stMonth)
{
    this->stMonth = stMonth;
}
void Reservation::setStYear(int stYear)
{
    this->stYear = stYear;
}
void Reservation::setDuration(int duration)
{
    this->duration = duration;
}
void Reservation::setCost(float cost)
{
    this->cost = cost;
}
void Reservation::setLicensePlate(std::string licensePlate)
{
    this->licensePlate = licensePlate;
}

Main.cpp

#include "pch.h"
#include "Reservation.h"

//Regular Expressions
std::string idRegexStr = "[0-9]{3,4}";
std::string nameRegexStr = "[A-Za-z]{1}[a-z]{1,30} [A-Za-z]{1}[a-z]{1,30}";
std::string stDateRegexStr = "[0-3]{1}[0-9]{1}";
std::string stMonthRegexStr = "[0-1]{1}[0-9]{1}";
std::string stYearRegexStr = "[1-2]{1}[0-9]{1}[0-9]{1}[0-9]{1}";
std::string durationRegexStr = "[1-9]{1}[0-9]{1}";
std::string costRegexStr = "[0-9]{2}.[0-9]{2}";
std::string licencePlateRegexStr = "[0-9]{2,3}\\s*[A-Z]{2,3}\\s*[0-9]+";

//Validates data against a user-defined string
bool validate(std::string regexStr, std::string data)
{
    return std::regex_match(data, std::regex(regexStr));
}

std::vector<Reservation>populateVector(Reservation defaultVector, int size)
{
    std::vector<Reservation> outVector;
    for (int i = 0; i < size; i++)
    {
        outVector.push_back(defaultVector);
    }
    return outVector;
}

double getAverageCostPerDay(const std::vector<Reservation> outVector)
{
    double average = 0;
    for (std::size_t i = 0; i < outVector.size(); i++)
    {
        average = std::vector<Reservation>outVector.at(float cost);
    }
    return true;
}

int main()
{
    /*
    //these were example values to see if regex works
    bool idIsValid = validate(idRegexStr, "101");
    bool nameIsValid = validate(nameRegexStr, "John Smith");
    bool stDateIsValid = validate(stDateRegexStr, "24");
    bool stMonthIsValid = validate(stMonthRegexStr, "10");
    bool stYearIsValid = validate(stYearRegexStr, "2018");
    bool durationIsValid = validate(durationRegexStr, "10");
    bool costIsValid = validate(costRegexStr, "22.50");
    bool licenseIsValid = validate(licencePlateRegexStr, "181 LH 555");

    std::cout << "Invalid = 0 / Valid = 1\n";
    std::cout << "\n";
    std::cout << "Valid ID: " << idIsValid << std::endl;
    std::cout << "Valid Name: " << nameIsValid << std::endl;
    std::cout << "Valid Start Date: " << stDateIsValid << std::endl;
    std::cout << "Valid Start Month: " << stMonthIsValid << std::endl;
    std::cout << "Valid Start Year: " << stYearIsValid << std::endl;
    std::cout << "Valid Duration: " << durationIsValid << std::endl;
    std::cout << "Valid Cost: " << costIsValid << std::endl;
    std::cout << "Valid License: " << licenseIsValid << std::endl;
    */

    Reservation r1(101, "John Smith", 24, 10, 2018, 4, 22.50, "181 LH 
    5555");
    Reservation r2(102, "Jane Caroll", 31, 01, 2017, 6, 34.25, "161 DUB 
    55454");
    Reservation r3(103, "Sean Morrissey", 16, 06, 2014, 2, 67.50, "162 WEX 
    83675");
    Reservation r4(104, "Billy Joe", 04, 03, 2016, 8, 51.20, "152 DUB 
    10347");
    std::cout << "Reservation Count: " << Reservation::getReservationCount() 
    << 
    std::endl;
}

1 个答案:

答案 0 :(得分:0)

有两种方法可以做到这一点。

  1. 您可以将预留向量包装在一个类中,并跟踪预留数量,总成本和计算平均值。

  2. 但是,如果必须通过Reservation类返回此信息,则必须使用静态变量来表示费用总和和保留对象数。静态属性在该类的所有对象中可用,并且在所有对象之间具有相同的值。因此,每次创建保留对象时,都要增加费用计数和总和。然后,当您需要平均值时,可以从任何对象或通过类计算平均值(如果您要创建静态函数来执行此操作)。