константное значение n, m

143
27 ноября 2020, 11:40

Пытаюсь получить транспонированную матрицу, но выдает ошибку Выражение должно иметь константное значение 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;
}
Answer 1

Вот такие фокусы

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];

а потом не забывать ее освобождать...

Answer 2

Еще вариант:

//для неких констанных значений
// например   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] ); 
READ ALSO
Python extension modules без линковки к pythonXX.dll

Python extension modules без линковки к pythonXX.dll

Возможно ли использовать импортируемые dll (имеющие расширениеpyd) в питоне на Windows без линковки к pythonXX

94
Задание имени библиотеки, используя generator expressions

Задание имени библиотеки, используя generator expressions

Пытаюсь задать название библиотеки, используя generator expressions, однако получаю ошибку сборки:

148
C++ перегрузка оператора = для объекта с shared_ptr

C++ перегрузка оператора = для объекта с shared_ptr

Создал класс, который реализует массив на shared_ptrХочу перегрузить операцию равно, внутри метода все работает - массив получает новый размер...

95
Определение вне класса для static const int

Определение вне класса для static const int

Насколько мне известно, для типа int инициализировать статические константные члены можно внутри класса, не вынося определение вне класса:

119