Во всех реализациях, которые я видел, выделенная часть вектора - это ... сам массив.Если вы знаете, что он больше не будет расти, вы можете попытаться уменьшить его, чтобы высвободить, возможно, неиспользуемую память:
i.shrink_to_fit();
int* v = i.data();
Конечно, ничто не гарантирует, что реализация что-нибудь сделает, но единственная надежная альтернатива будетчтобы выделить новый массив, переместить данные из вектора в массив и очистить вектор.
int *v = new int[i.size];
memcpy(v, i.data, i.size * sizeof(int));
i.clear();
Но я действительно сомневаюсь, что таким образом вы получите существенный выигрыш ...