Пытаюсь получить транспонированную матрицу, но выдает ошибку Выражение должно иметь константное значение n, m; Не могу понять что не так, пример с сайта брал говорят рабочий
Если есть реализация проще, например с одним циклом, буду рад.
#include <iostream>
using namespace std;
int main() {
int n, m;
cin>>n>>m;
int M[n][m];
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
cin >> M[i][j];
}
}
int M1[m][n];
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
M1[i][j]=M[j][i];
}
}
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
cout<<M1[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
Вот такие фокусы
int n, m;
cin>>n>>m;
int M[n][m];
стандартом запрещены (работает в качестве расширения GCC). Размеры массивов должны быть определены во время компиляции.
Вам стоит воспользоваться векторами, например
vector<vector<int>> M(n,vector<int>(m));
или выделять память динамически типа
int **M = new int*[n];
for(int i = 0; i < n; ++i) M[i] = new int[m];
а потом не забывать ее освобождать...
Еще вариант:
//для неких констанных значений
// например const int n = 5, m = 6;
int M[n][m], // ваша матрица
Mt[m][n] ; // для транспонации
std::valarray<int>
v(M[0], n * m), // инициализирован из М
// транспонированная
vs(v[std::gslice(0, {m, n}, {1, m})]);
// копирование в массив
std::copy_n(&vs[0], n * m, Mt[0] );
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Возможно ли использовать импортируемые dll (имеющие расширениеpyd) в питоне на Windows без линковки к pythonXX
Пытаюсь задать название библиотеки, используя generator expressions, однако получаю ошибку сборки:
Создал класс, который реализует массив на shared_ptrХочу перегрузить операцию равно, внутри метода все работает - массив получает новый размер...
Насколько мне известно, для типа int инициализировать статические константные члены можно внутри класса, не вынося определение вне класса: