Как расширить размер динамического массива типа string в с++?

В C++, размер динамического массива типа string можно расширить путем использования указателя на массив и функций new и delete, либо с использованием класса std::vector.

Способ №1: Использование указателя на массив и функций new и delete:

1. Создайте указатель на массив типа string. Например:

string* arr;

2. Инициализируйте указатель на массив, задав начальный размер:

int initialSize = 5;
arr = new string[initialSize];

3. Для увеличения размера массива, создайте новый массив большего размера, скопируйте данные из старого массива в новый и освободите память старого массива. Например, для увеличения размера вдвое:

int newSize = initialSize * 2;
string* newArr = new string[newSize];
for (int i = 0; i < initialSize; i++) {
    newArr[i] = arr[i];
}
delete[] arr;
arr = newArr;

Теперь массив arr имеет увеличенный размер и содержит копии всех предыдущих элементов.

4. После использования массива, не забудьте освободить выделенную память:

delete[] arr;

Способ №2: Использование класса std::vector:

1. Включите заголовочный файл <vector>:

#include <vector>

2. Создайте объект std::vector типа string и задайте начальный размер:

int initialSize = 5;
std::vector<string> vec(initialSize);

3. Чтобы увеличить размер вектора, вы можете использовать метод resize:

int newSize = initialSize * 2;
vec.resize(newSize);

Теперь вектор vec имеет увеличенный размер. Новые элементы будут инициализированы значениями по умолчанию для типа string.

4. Как и в случае с массивом, после использования вектора освободите выделенную память не требуется. Деструктор объекта std::vector автоматически освободит занятую память при его выходе из области видимости.

Оба способа имеют свои преимущества и недостатки. Использование указателя на массив требует более низкоуровневых навыков программирования и более подвержено ошибкам, но может быть полезным в определенных ситуациях. Вектор std::vector, с другой стороны, обеспечивает абстракцию и удобство использования, автоматическое управление памятью и множество полезных методов для работы с массивом.

Выбор конкретного способа зависит от конкретного случая и требований вашей программы.