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如果他们在时不能使用怎么办?