Мне нужен динамический массив, поэтому мне нужно выделить необходимый объем памяти через указатель. Что заставляет меня задуматься о том, что является хорошим решением, так это то, что C ++ может делать что-то вроде:
int * p = new int[6];
, который выделяет необходимый массив. Что мне нужно, так это то, что впоследствии я хочу вырастить некоторые части этого массива. Пример с ошибками:
int *p1 = &p[0];
int *p2 = &p[2];
int *p3 = &p[4];
// delete positions p[2], p[3]
delete [] p2;
// create new array
p2 = new int[4];
Я не знаю, как этого добиться.
РЕДАКТИРОВАТЬ: std::vector
не работает для меня, поскольку мне нужно, чтобы время вставки / удаления элементов k
было пропорционально числу k
, а не количеству элементов, хранящихся в std::vector
.
В общем случае, используя указатели, я бы указывал на начало любой не непрерывной области памяти и учитывал, сколько элементов она хранит. Концептуально, я бы разбил большой массив на множество маленьких и не обязательно в непрерывном пространстве в памяти (удаление создает «дыры», в то время как распределение не обязательно «заполняет» их).