Я собираюсь высказать свое мнение здесь для кодирования массива / векторов большого размера, используемых в науке и технике.
Массивы на основе указателей в этом случае могут быть немного быстрее, особенно для стандартных типов. Но указатели добавляют опасность возможных утечек памяти. Эти утечки памяти могут привести к увеличению цикла отладки. Кроме того, если вы хотите сделать массив на основе указателей динамическим, вы должны написать это вручную.
С другой стороны, векторы медленнее для стандартных типов. Они также являются динамическими и безопасными для памяти, если вы не храните динамически размещенные указатели в векторе stl.
В науке и технике выбор зависит от проекта. Насколько важна скорость и время отладки? Например, LAAMPS, являющаяся программным обеспечением для моделирования, использует необработанные указатели, которые обрабатываются через их класс управления памятью. Скорость является приоритетом для этого программного обеспечения. Программное обеспечение, которое я создаю, я должен сбалансировать скорость, объем памяти и время отладки. Я действительно не хочу тратить много времени на отладку, поэтому я использую вектор STL.
Я хотел добавить к этому ответу еще немного информации, которую я обнаружил в результате обширного тестирования крупномасштабных массивов и большого чтения в Интернете. Таким образом, другая проблема с векторным массивом stl и массивами большого размера (более миллиона) возникает в том, как выделяется память для этих массивов. Stl vector использует класс std :: allocator для обработки памяти. Этот класс является распределителем памяти на основе пула. При небольшой загрузке распределение на основе пула чрезвычайно эффективно с точки зрения скорости и использования памяти. Когда размер вектора исчисляется миллионами, стратегия, основанная на пуле, становится проблемой памяти. Это происходит потому, что тенденция к пулам всегда состоит в том, чтобы держать больше места, чем в настоящее время используется вектором stl.
Для крупномасштабных векторов вам лучше либо написать собственный векторный класс, либо использовать указатели (raw или какая-то система управления памятью из boost или библиотеки c ++). У обоих подходов есть свои преимущества и недостатки. Выбор действительно зависит от конкретной проблемы, которую вы решаете (слишком много переменных, чтобы добавить сюда). Если вам случится написать свой собственный векторный класс, убедитесь, что вектор простой способ очистить его память. В настоящее время для вектора Stl вам нужно использовать операции подкачки, чтобы сделать что-то, что действительно должно быть встроено в класс.