sqrt(vx*vx+vy*vy) (если оно не 0) и сдвигайте спрайт на vx, vy.vx*vx+vy*vy может быть только 0,1 или 2. Заведите константный массив kScaleCoef[3] = {1, 1, sqrt(2)} и потом делайте Sprite.Move(speed/kScaleCoef[vx*vx+vy*vy]*vx, speed/kScaleCoef[vx*vx+vy*vy]*vy); std::vector<int> MakeArray();
void Print(const std::vector<int> array);int* MakeArray(int *len);
void Print(int *array, int len); // a[moved] увеличился.
tmp = a[moved];
for (i = moved+1; i < a.size() && a[i] < tmp; ++i) {
a[i-1] = a[i];
}
a[i-1] = tmp; size и потом проходитесь циклом до size по обеим строкам. Но ведь более короткой строки там просто нет - вы обращаетесь к не вашей памяти.