Это для проблемы с неградиентной проблемой, где я ищу, чтобы найти как можно больше простых чисел. Одним из ограничений является то, что я должен использовать new/delete, поэтому std::vector
не является вариантом. В этой проблеме мне нужно добавить в массив (в моем случае динамически созданный массив с именем list), который содержит простые числа. Моя цель - добиться аналогичной функциональности для вектора, где требуется выделить новую память, если в текущем массиве недостаточно места, а когда текущий массив заполняет новый массив, в 2 раза превышающий длину. Моя функция добавить штрих к списку нижесделать динамический массив более крупным
void PrimeList::addPrimeToList(int newPrime) {
if(sizeof(list)/sizeof(int) > total) { // there is still room in the array
list[total++] = newPrime;
} else { // list has run out of space to put values into
int *newList = new int [total*2]; // new list to hold all previous primes and new prime
for(int i=0; i < total; i++) { // for every old prime
newList[i] = list[i]; // add that old prime to the new list
}
newList[total++] = newPrime; // set largest and the last index of the new list to the new prime
delete [] list; // get rid of the old list
list = newList; // point the private data member list to the newly created list.
}
}
Примечания: всего является частным членом данных, который содержит количество простых чисел, найденное до этого момента.
Моя проблема заключается в том, что инструкция else (и временное распределение/освобождение) происходит каждый раз, когда вызывается функция (за исключением того, что первые два вызова всегда запускают первую часть if). Я бы подумал, что часть if будет работать в большинстве случаев - всякий раз, когда в списке все еще есть место, - так почему же это не так?