C ++ 17では、Fortran 90以降、Fortranにあった通常の多次元配列はまだありません。

. restrict, C Fortran C. , , . .



. . , C++ (, ). runtime. ?



double a[n][n]



std::array<std::array<double, n>, n>



, . . (n) runtime. new double[n][n]



( , new, runtime-). :



double **a = new double *[n]; //   n   double
for (int i = 0; i != n; ++i)
  {
    a[i] = new double[n];
  }

      
      



. i- j- a[i][j]. . a — . , . , i- j- , , . ( . .) . std::vector<std::vector<



double>>



.



UPD 2016-12-11 0:00. . , .



:



double *a = new double[n * n];

      
      





, i- j- : a[i * n + j]. .



, (a[i][j]), ? , . .



. C99 variable length arrays (VLA), , . . gcc VLA , ( ) . ( , . UPD.)



Fortran . i- j- .



, , Fortran . Fortran', 1957- . Fortran' (FORmula TRANslation), (C 1969- ). Fortran' . . . Fortran 90.



Fortran 90 . 26 . 26 Fortran'. C++ .



:



REAL, ALLOCATABLE :: A (:,:)
...
ALLOCATE (A (N,N))

      
      





i- j- : A(I, J) (, , Fortran C C++).



, - C++. Boost.MultiArray. Boost, , .



restrict. restrict. Fortran' (, ). , , . . . a b, , a[2] ( C) b[3]. , a[2], b[3], a[2] , b[3] . . aliasing.



, C . , , , , . :



void f (int a[2])
      
      





:



void f (int a[])
      
      





:



void f (int *a)
      
      





. , «» a «» b, . , , , , / , , ( C89, ). , , a[2] — b[3]. , a[2], b[3], commit . , Fortran'.



C99 - restrict, , « », , . , C Fortran.



Fortran . , Fortran , : C. , , Fortran C.



. aso. , . Fortran'. , , restrict. Fortran . :) , , , . , C. Fortran', , - - , restrict C Fortran. . :)



UPD 2016-12-10 14:03. selgjos, , C99 VLA - . , : double a[n][n]



, . . . :



double (*a)[n] = malloc (n * n * sizeof (double));
      
      





a — , . n n, . i- j- a[i][j]. - , :



void f (int n, double a[n][n])
      
      





, , C . Fortran. C++ - .



UPD 2016-12-12 19:12. :

, . . , , , , . , , , . .




UPD 2016-12-12 22:49. :

C++ Fortran C. , , , . Fortran «» , C++ — . .



All Articles