Можно ли создать массив в куче во время выполнения, а затем выделять больше места при необходимости?

Допустим, я делаю

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] */

Хотя это обходной путь, я бы предложил использовать вектор.

Другие вопросы по тегам