C++ 如何在何时扩展动态分配的阵列?

C++ 如何在何时扩展动态分配的阵列?,c++,dynamic-memory-allocation,C++,Dynamic Memory Allocation,我需要向动态分配的Flight数组中添加元素到我的程序中。作为flights*allFlights的初始化,我将数组的大小设置为1,并希望放大它的大小,因为我需要添加更多 例如: //Flight.cpp 航班:航班(国际航班号、国际行号、国际座位号) { flightNo=flightNumber; rowNo=行数; seatNo=seatNumber; } //main.cpp 航班*所有航班=新航班[1]; 我找不到合适的方法根据需要扩展它,因此我尝试通过使用两个单独的整数值来解决这

我需要向动态分配的
Flight
数组中添加元素到我的程序中。作为
flights*allFlights
的初始化,我将数组的大小设置为1,并希望放大它的大小,因为我需要添加更多

例如:

//Flight.cpp
航班:航班(国际航班号、国际行号、国际座位号)
{
flightNo=flightNumber;
rowNo=行数;
seatNo=seatNumber;
}
//main.cpp
航班*所有航班=新航班[1];
我找不到合适的方法根据需要扩展它,因此我尝试通过使用两个单独的整数值来解决这个问题,分别是
numberOfFlights
capacityoflights
。我将
numberOfFlights
初始化为0,将
capacityoflights
初始化为1,并在每次添加新的
flights
时将
numberOfFlights
增加1,并将其与
capacityoflights
进行比较。如果它们相等,我将按照以下步骤扩展数组

if(numberOfFlights!=flightCapacity)
{
Flight newFlight(flightNo、rowNo、seatNo);//创建新的Flight对象
所有航班[航班数]=新航班;
numberOfFlights=numberOfFlights+1;
}
其他的
{
Flight newFlight(flightNo、rowNo、seatNo);//创建新的Flight对象
//重新分配allFlight的动态阵列以适应新航班
飞行能力=飞行能力*2;
自动*温度=新航班[飞行能力];
副本(所有航班,所有航班+航班数量,临时);
删除[]所有航班;
所有航班=临时航班;
//将新航班添加到阵列
所有航班[航班数]=新航班;
numberOfFlights=numberOfFlights+1;
}
我知道使用
std::vector
可以很容易地解决这个问题,但在这种情况下,我不允许使用它


这是解决问题的好办法吗?我个人认为使用2个
int
值并通过
if
语句不断检查大小是浪费资源的。

您的代码有重复的部分。数组的增加和数据的放置可以分开

       if (numberOfFlights == flightCapacity)
       {
          //Reallocating dynamic array of allFlight to fit new flights
          flightCapacity = flightCapacity * 2;
          auto* temp = new Flight[flightCapacity];
          copy(allFlights, allFlights + numberOfFlights, temp);
          delete[] allFlights;
          allFlights = temp;
       }
       Flight newFlight(flightNo, rowNo, seatNo); //Creating new flight object
       //Adding the new flight to array
       allFlights[numberOfFlights] = newFlight;
       numberOfFlights = numberOfFlights + 1;

“我个人觉得这是浪费资源”——为什么?您需要知道数组的大小。明确使用
new
delete
。只需使用
std::vector
,插入项就很简单了。@MarekR我想其中一个要求是没有向量,就像问题所说的。你可以使用而不是
std::vector
。这是解决问题的好方法吗?--创建您自己的通用向量类,在这里您可以学习如何正确地组合此类类,而不是创建一次性类,例如
Flight
。然后,每当你得到“不能使用vector”的需求时,你就有了一个现成的vector类。如果OP不能使用
std::vector
,那么他很可能也不能使用
std::copy()。如果是这样,请使用手动循环:
for(int i=0;i
如果他们不能使用
for
怎么办?那么OP将如何迭代可用的
航班
s?递归?(A;B;C)D
可以写成
A;而(B){D;C;}
期望一些差异,比如范围和
continue的效果
@MikeCAT如果他们在
时不能使用
怎么办?