Когда использовать векторы и когда использовать массивы в С++?

Я обычно не уверен, когда лучше использовать один против другого. Они оба, похоже, делают одни и те же вещи вообще, но вектор более гибкий с точки зрения того, что он может сделать? Когда подходящие массивы?

Ответ 1

Обычно всегда предпочитайте использовать std::vector<T>, так как разрушение будет автоматически после того, как вектор выйдет из области, а выделенная память будет аккуратно размещена в куче, и вся память будет обработана для вас. std::vector<T> предоставляет вам все, что вы получаете в массиве, и даже гарантию того, что элементы будут смежно сохранены в памяти (кроме std::vector<bool>).

В случае std::vector<bool> вы должны быть осторожны, так как такой код сломается:

 std::vector<bool> vb;
 vb.push_back(true);
 vb.push_back(false);
 vb.push_back(true);
 bool *pB = &vb[0];
 if( *(pB+1) )
 {
     // do something
 }

Факт: std::vector<bool> не сохраняет смежные bool s. Это исключение в стандарте, который исправлен в С++ 11.

Ответ 2

Я использую только массивы при работе со встроенными системами или когда это требуется некоторым API-интерфейсам (т.е. принимать их как аргумент для функции). Кроме того, если есть только одно или два места, где мне нужно будет использовать массивы или не обязательно использовать векторную функциональность, имеет смысл использовать массивы только из-за дополнительных накладных расходов vector.h.

В противном случае просто используйте векторы:)