我是C ++的初学者,我正在尝试创建一个模拟飞行管理系统的程序。我创建了一些类来简化过程。现在,我有一个名为“ Flight”的类,该类具有其他用户定义的数据类型作为其属性。例如,它包括两个“日期”对象,用于我的航班对象的到达和离开日期。我也有30个“乘客”对象的数组,这些对象代表航班上的乘客。我在更改此数组时遇到困难。我需要为我的Flight类编写一个成员函数,该函数可以在给定ID(这是Passenger的属性)的情况下从数组中删除Passengers。
我想尝试通过传递一个整数“ removeID”来实现此功能。然后将该值与阵列中乘客的ID进行比较。如果匹配,该条目将被“删除”,从而释放数组中的空间。
我的Flight类是在其自己的头文件中定义的。
#include <string>
#include "Date.h"
#include "Time.h"
#include "Passenger.h"
#ifndef FLIGHT_H_
#define FLIGHT_H_
class Flight
{
public:
Flight(std::string, Date, Date, Time, Time);
float flightTime();
void addPassenger(Passenger);
void removePassenger(int);
bool listChecker(Passenger);
void flightListPrinter()const;
int seatsRemaining();
private:
std::string flightNumber;
Date arrivalDate;
Date departureDate;
Time arrivalTime;
Time departureTime;
std::string destination;
Passenger* passengerList[30];
int numPassengers;
};
#endif
这是我班的乘客的布局:
#include <string>
#include "Date.h"
class Passenger
{
public:
//Part a)
// Constructor
Passenger(int = 1337, std::string = "Name", std::string = "Banana Island", std::string = "(514)514-5145", Date birth=(1,1,1999));
// Part b)
int getID();
std::string getName();
std::string getAddress();
std::string getTel();
Date getBday();
// Part c)
void setAddress(std::string);
void setTel(std::string);
void setBirthD(Date);
// Part d)
void printInfo()const;
private:
int ID;
std::string name;
std::string address;
std::string Tel;
Date birthD;
};
我正在尝试访问ID(乘客对象的属性,它本身就是Flight对象的属性)。乘客全部存储在一个名为passengerList的数组中,长度为30位乘客。在我的main.cpp文件中,我定义了remove passenger函数,如下所示:
void Flight::removePassenger(int removeThisID) // Passing the ID to remove
{
for (int i = 0; i < 30; i++) // Check all the passengers in the array
{
// Unsure about the way to access the ID. PassengerList[i].ID == removeThisID ?
}
}
答案 0 :(得分:1)
您无法从阵列中删除。它的固定大小。
一种方法是每次更改大小时都重新创建数组,
但这会很烦人。
很高兴有一个c ++标准库可以用来解决 这样的问题。
它具有一组containers的多样化集合,用于管理其元素的存储空间并提供用于访问它们的成员函数。
将Passenger* passengerList[30]
替换为std::vector<Passenger> passengerList
void Flight::removePassenger(int removeThisID) // Passing the ID to remove
{
for (unsigned int i = 0; i < passengerList.size(); i++)
{
// if (passengerList.at(i).getID() == removeThisID)
if (passengerList.at[i].getID() == removeThisID)
{
passengerList.erase(passengerList.begin()+i);
return;
}
}
}
答案 1 :(得分:1)
不幸的是,根据我对您的项目的了解,您不能从数组中删除,我可以建议您2件事来克服此问题 1-您可以在每次删除操作时将数组存储在其他数据结构中,然后在没有目标的情况下将其重新初始化,这是很多工作,或者 2-您可以使用cpp的标准库(std)中的向量,该向量将自动为您做第一部分。您可以从http://www.cplusplus.com/reference/vector/vector/vector/
检查向量