В 99% случаев и в 99% реализаций стандартной библиотеки вы обнаружите, что std :: vectors будут достаточно быстрыми, а удобство и безопасность, которые вы получите от их использования, превысят любую небольшую стоимость производительности.
В тех очень редких случаях, когда вам действительно нужен голый металлический код, вы можете рассматривать вектор как массив в стиле C:
vector <int> v( 100 );
int * p = &v[0];
p[3] = 42;
Стандарт C ++ гарантирует, что векторы распределяются непрерывно, поэтому это гарантированно сработает.
Что касается строк, фактор удобства становится подавляющим, а проблемы с производительностью, как правило, уходят. Если вы не обращаете внимания на строки в стиле C, вы также возвращаетесь к использованию таких функций, как strlen (), которые сами по себе очень неэффективны.
Что касается списков, вам следует подумать дважды и, возможно, трижды, прежде чем вообще их использовать, будь то собственная реализация или стандарт. Подавляющее большинство вычислительных проблем лучше решать с помощью вектора / массива. Списки причин часто встречаются в литературе в значительной степени потому, что они представляют собой удобную структуру данных, которую авторы учебников и учебных курсов могут использовать для объяснения указателей и динамического распределения за один раз. Я говорю здесь как бывший автор учебного курса.