Не могу поменять местами элементы двумерного массива с помощью дополнительного вектора
Не понимаю как поменять местами 2 столбец с 3-им рядом с помощью дополнительного вектора
#include <iostream>
#define N 100
#define M 100
using namespace std;
int main()
{
setlocale(LC_ALL, "ru");
int rows = 0, columns = 0;
cout << "Введите количество строк массива: ";
cin >> rows;
cout << "Введите количество столбцов массива: ";
cin >> columns;
int Array[N][M];
cout << "Начальный массив: " << endl;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
Array[i][j] = rand() % 41 - 20;
cout << Array[i][j] << "\t";
}
cout << endl;
}
cout << endl;
//Попытка поменять местами элементы без дополнительного вектора
for (int i = 0; i < rows && i < columns; i++)
{
int tmp;
tmp = Array[3][i];
Array[3][i] = Array[i][2];
Array[i][2] = tmp;
}
cout << endl;
cout << "Преобразованный массив: " << endl;
for (int i = 0; i < rows; i++) {
if (rows == 3 || columns == 2) {
cout << "Вы ввели слишком маленькое значение" << endl;
break;
}
for (int j = 0; j < columns; j++) {
cout << Array[i][j] << "\t";
}
cout << endl;
}
system("pause");
return 0;
}
Ответы (1 шт):
Автор решения: Павел Ериков
→ Ссылка
Так ну если я правильно все понял, то вот пример кода замены 3 ряда и 2 столбца между собой:
vector<int> row3(rows);
vector<int> col2(columns);
//Копируем 3 ряд
for (int i = 0; i < rows; i++)
row3[i] = Array[2][i];
//Копируем 2 столбец
for (int i = 0; i < columns; i++)
col2[i] = Array[i][1];
//Меняем местами
for (int i = 0; i < rows && i < columns; i++)
{
Array[2][i] = col2[i];
Array[i][1] = row3[i];
}
Так же @AlexeyVesker прав и вам нужно делать проверку на введенное кол-во строк и столбцов таким образом:
if (rows < 3 || columns < 2) {
cout << "Вы ввели слишком маленькое значение" << endl;
break;
}
А так же эту проверку поместить перед началом замены.
Самый простой способ вывести данные вектора это:
for(int i = 0; i < row3.size(); i++)
cout << row3[i] << endl;