std :: string в std :: vector?

У меня уже есть некоторые проблемы с std::vector внутри std::vector если внутренние векторы переразмерены. Я хотел бы знать, если это совершенно безопасно иметь std::vector<std::string> (потому что внутренние строки могут быть переразмерены) или std::vector<std::string*> лучше ?

-1

Решение

Этот вопрос, скорее всего, является следствием неправильного представления о том, что вектор выглядит так же, как массивы.

Это правда, что массив должен содержать элементы одинакового типа и статического размера, так как это правда, что вектор может быть изменен, но статический sizeof(vector<X>) не зависит от его размера во время выполнения.
vector<vector<X> > содержит внутри только указатель (плюс некоторые другие описательные данные) на динамически распределяемый массив vector<X> каждый из которых в свою очередь содержит только указатель на свой собственный динамически размещенный массив X,

Массивы на самом деле состоят из одинаковых элементов, одинакового размера.

3

Другие решения

Это совершенно безопасно разместить в vector любой тип, соответствующий требованиям стандарта. Эти требования строго указаны в интерфейсе и в основном суммируются как «Подвижные». Как std::string подвижный, его можно поместить в vector, Тот факт, что он может динамически выделять другую память, не имеет значения.

1

По вопросам рекламы [email protected]