Мистика с вычитанием итератора
Имеется следующий код:
#include <iostream>
int main(){
int t;
std::cin >> t;
for(int x=0; x<t; ++x){
int n, k;
std::cin >> n >> k;
int a[n];
int b[n];
int ans = 0;
for(int y=0; y<n; ++y){
std::cin >> a[y];
}
for(int y=0; y<n; ++y){
std::cin >> b[y];
}
for(int y=0; y<k; ++y){
for(int z=0; z<n; ++z){
if(b[z] == -1){
b[z] = k;
b[z] -= a[z];
b[z] -= y; // не вычитается (а если поставить число - вычитается)
}
std::cout << b[z] << "(" << y << ")" << a[z] << std::endl;
}
std::cout << "---" << std::endl;
for(int z=0; z<n; ++z){
if(b[z] != a[z]){
break;
}
++ans;
}
}
std::cout << ans;
}
}
В начале третьего цикла for с итератором y из поля b[z] должно произойти вычитание и числа a[z] и итератора y. Но по какой-то причине итератор не вычитается.
Причем, если подставить вместо переменной у число, то оно вычитается без проблем.
Подскажите пожалуйста, что это за мистика?