В С++ существует несколько веских причин использовать массив C над std::vector. Одной из немногих убедительных причин, по крайней мере, с С++ 03, был тот факт, что невозможно использовать вектор для выделения неинициализированного массива объектов. Конструктор "fill" для std::vector:
 vector(size_type count, const T& value = T())
Значит, что...
int* array = new array[1000000];
вероятно, будет намного более эффективным, чем:
std::vector<int> v(1000000);
... так как вектор-конструктор должен будет нуль инициализировать массив целых чисел. Таким образом, при работе с вектором POD нет реального эквивалента malloc; лучшее, что вы можете получить, эквивалентно calloc.
С++ 11, похоже, изменил это, с понятием "инициализация ценности". В С++ 11 std::vector имеет новый конструктор, который принимает единственное значение size_type без аргумента по умолчанию. Это "значение-инициализирует" все элементы вектора. Стандарт С++ 11 различает "инициализацию значения" и "нулевую инициализацию".
Я понимаю, что "инициализация значений" эквивалентна вызову конструктора по умолчанию на T. Если T - тип POD, такой как int, то конструктор по умолчанию просто создает неинициализированное целое число. Таким образом, в С++ 11 explicit vector::vector(size_type count) действительно эквивалентен malloc, если T является POD.
Однако мое понимание этого основано на проекте стандарта С++ 11, а не на окончательном стандарте.
  Вопрос. Является ли мое понимание правильным здесь? Предоставляет ли explicit vector::vector(size_type count) неинициализированный массив (похожий на malloc), если T является POD?
