У меня уже есть некоторые проблемы с std::vector
внутри std::vector
если внутренние векторы переразмерены. Я хотел бы знать, если это совершенно безопасно иметь std::vector<std::string>
(потому что внутренние строки могут быть переразмерены) или std::vector<std::string*>
лучше ?
Этот вопрос, скорее всего, является следствием неправильного представления о том, что вектор выглядит так же, как массивы.
Это правда, что массив должен содержать элементы одинакового типа и статического размера, так как это правда, что вектор может быть изменен, но статический sizeof(vector<X>)
не зависит от его размера во время выполнения.
vector<vector<X> >
содержит внутри только указатель (плюс некоторые другие описательные данные) на динамически распределяемый массив vector<X>
каждый из которых в свою очередь содержит только указатель на свой собственный динамически размещенный массив X
,
Массивы на самом деле состоят из одинаковых элементов, одинакового размера.
Это совершенно безопасно разместить в vector
любой тип, соответствующий требованиям стандарта. Эти требования строго указаны в интерфейсе и в основном суммируются как «Подвижные». Как std::string
подвижный, его можно поместить в vector
, Тот факт, что он может динамически выделять другую память, не имеет значения.