В целочисленном двумерном массиве нужно поменять первую и последнюю строку

Код:

int main() {
    setlocale(LC_ALL, "Russian");
    int arr[4][3];
    int temp1[4];
    int temp2[4];

for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 3; j++) {
        std::cin >> arr[i][j];
    }
}

for (int i = 0; i < 4; i++) {
    temp1[i] = arr[0][i];
    temp2[i] = arr[3][i];
    arr[0][i] = temp2[i];
    arr[3][i] = temp1[i];
}

for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 3; j++) {
        if (j == 2) {
            std::cout << arr[i][j];
        }
        else {
            std::cout << arr[i][j] << ' ';
        }
    }
    std::cout << std::endl;
}


return 0;
}

Почему не выводится один элемент массива?

Ввод:

1 2 3
4 5 6
7 8 9
10 11 12

Вывод:

10 11 12
6422280 5 6
7 8 9
1 2 3

Почему вместо '4' выводится '6422280'


Ответы (1 шт):

Автор решения: Harry

Все просто. У вас сколько столбцов? Три. А сколько вы пытаетесь обменивать?

for (int i = 0; i < 4; i++) {

Четыре. Вот и делаете ерунду - меняете ячейку из второй строки с ячейкой за пределами массива...

Но зачем вы вообще через какие-то массивы это делаете? Вот так гораздо проще:

for (int i = 0; i < 3; i++)
{
    int t = arr[0][i];
    arr[0][i] = arr[3][i];
    arr[3][i] = t;
}

Можно и еще проще, раз у вас С++:

for (int i = 0; i < 3; i++)
    swap(arr[0][i],arr[3][i]);
→ Ссылка