Можно ли создать массив в куче во время выполнения, а затем выделять больше места при необходимости?
Допустим, я делаю
char *a;
a = new char[4];
Теперь можно ли расширить размер массива дальше?
Скажем, я хочу сохранить любые ценности, которые я вложил в a[0]
в a[3]
но теперь я хочу больше места для a[4]
а также a[5]
и т.д. Возможно ли это в C++?
Сначала я чувствовал, что, может быть, я мог бы просто сделать:
char* a[10];
a[0] = new char[size];
Всякий раз, когда нужно больше места, я могу пойти в a[1]
и выделить больше места. Это единственная альтернатива, о которой я могу подумать на данный момент.
2 ответа
К сожалению, это невозможно в C++. Вы должны выделить новую область и скопировать старую в новую.
Однако в C++ есть и другие возможности, такие как std::vector
, что избавляет от необходимости вручную обрабатывать эти вещи.
Вместо char* a вы можете использовать char** a;
т.е.
char** a = new char*[4];
for(int i=0; i<4; i++)
(*a)[i] = new char(i); /* feed values to array */
/* now you need a[4]? no problem */
char tmp = (*a)[3];
a[3] = new char[2];
a[3][0] = tmp;
a[3][1] = xyz; /* this is you a[4] */
Хотя это обходной путь, я бы предложил использовать вектор.