Te adjunto un pequeño código de como lo he solucionado yo.
Creo el vector dos veces, copiado los datos, luego con esta rutina desplazo los componentes y asigno al original el valor introducido en la posición introducida, pon tu el código de aceptar los datos y mostrarlos, iValores la cantidad de datos del vector, iPos la posición pedida al usuario y iValor lo que quiere grabar. Yo he cargado los valores del 1 al 5 para simplificar.
int iValores = 4; // Cantidad de valores del vector
int iVector[5];
int iVectorC[5];
for(int i=0;i<5;i++) // Aqui cargo los vectores del 1 al 5
{
iVector[i] = i;
iVectorC[i] = i;
}
int iPos = 2; // Datos pedidos al usuario
int iValor = 48; // Datos pedidos al usuario
for(int i=iPos;i<iValores;i++) // Aqui corro el valor a partir de la posicion
iVectorC[i+1] = iVector[i];
iVectorC[iPos] = iValor; // Aqui asigno el valor introducido
for(int i=0;i<5;i++) // Aqui vuelvo a copiar un vector sobre el otro
iVector[i] = iVectorC[i];
cout << iVectorC[0] << endl;
cout << iVectorC[1] << endl;
cout << iVectorC[2] << endl;
cout << iVectorC[3] << endl;
cout << iVectorC[4] << endl;
iVector y iVectorC es donde están los datos almacenados, con el bucle for desde la posición deseada hasta el final, voy moviendo de iVector a iVectorC y después del bucle grabo el parámetro introducido, copia el vector de nuevo sobre la copia para la siguiente entrada.
Un saludo