Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c+中将动态二维传递给函数+;_C++_Arrays_Function_Multidimensional Array - Fatal编程技术网

C++ 如何在c+中将动态二维传递给函数+;

C++ 如何在c+中将动态二维传递给函数+;,c++,arrays,function,multidimensional-array,C++,Arrays,Function,Multidimensional Array,根据c99标准,这是一个有效的代码,该代码段在gcc编译器上运行良好 #include <stdio.h> void foo( int n, int m, int a[][m]){ //do stuff } int main() { int n, m; scanf("%d %d", &n, &m); int a[n][m]; foo(n, m, a); r

根据c99标准,这是一个有效的代码,该代码段在gcc编译器上运行良好

#include <stdio.h>
void foo( int n, int m, int a[][m]){
    //do stuff
}

int main() {
        int n,
            m;
        scanf("%d %d", &n, &m);
        int a[n][m];
        foo(n, m, a);
        return 0;
}
#include <cstdio>
#include <iostream>
using namespace std;
void foo( int n, int m, int a[][m]){
         //do stuff
}

int main() {
       int n,
           m;
    cin >> n >> m;
    int a[n][m];
    foo(n, m, a);
    return 0;
}

<> p>我不能在C++中找到简单的解决方案,因为C在这个问题上是可用的。

首先,必须在[Cux]int [][][M]<代码>中替换“代码”> M/<代码>,因为你不能用变量定义函数头中的数组列。 其次,不能像前面那样声明大小可变的数组,这里也必须使用常量

但是,如果要使用可变大小的数组,可以动态创建数组

int** a = new int*[n]; // It creates an array of pointers of size n
然后你可以循环这个指针数组,给每个指针分配一个整数数组

for (int i = 0; i < n; i++){
    a[i] = new int[m];
}
当您使用完数组后,您必须取消分配动态分配的数组

for (int i = 0; i < n; i++){
    delete[] a[i];
    a[i] = 0;
}
delete[] a;
a = 0;
使用
vector
时,您不必担心动态分配或取消分配,
vector
类自己处理此类内容。

< C++ >这个问题的一个简单的解决方案是使用2D向量< /p>
向量向量数组(10,向量(10))

并通过引用
和vec2DArray
将其传递给函数

#include <vector>
#include <iostream>
#include <iomanip>
using namespace std;


//  function to pass 2d vector array by reference &
void function( int n, int m,  vector <vector<int> > & vec2DArray ) {

    for (int y=0; y<10; y++ ){
        for (int x=0; x<10; x++  ){

            // perform some calculations
            vec2DArray[y][x] = (y+1) * (x+1) *m *n;

        }
    }
}


int main() {
    cout<<"function to pass 2d vector array by reference & \n\n";

    // create a 2D vector of dimension [10][10]
    vector <vector<int> > vec2DArray( 10, vector <int> (10) );
    int n=0, int m=0;

    // call function, pass 2d vector array  by reference &
    function( 1, 1, vec2DArray );

    // display calculation results
    for (int y=0; y<10; y++ ){
        for (int x=0; x<10; x++  ){

            // display vec2DArray
            cout << setfill(' ') << setw(2)<< vec2DArray[y][x] <<" ";
        }  
        cout<<"\n";
    }
    cout<<"\n";


cout<<"Press ANY key to close.\n\n";
cin.ignore(); cin.get();
return 0;
}
#包括
#包括
#包括
使用名称空间std;
//函数通过引用传递二维向量数组&
void函数(int n、int m、vector和vec2DArray){

对于(In y=0;你为什么期望两种不同的语言具有相同的特征?如果你使用C++,为什么不使用向量?你不会相信这里有多少用户在C多维数组中存在问题。@ AbHeHekJaysWAL如果你想学习C++,请检查。@ AbHeHekJasiWalC++不是C类的,它是不同的语言,而且是落后的。S兼容性是迄今为止的——可变长度数组,你试图使用的东西,是C++不支持的东西之一。如果你想真正学习C++,我鼓励你学习C++而不是学习如何编写C++编译器将接受的C。奥拉夫,我认为这是因为LLA的不幸命名。C++,它可以是…d,没有人期望D是与C兼容的源代码。此外,C++有一种表示C++应该被增强/改进的C,所以它有点反直觉,它缺少C的特性(当然它本身是好的,因为它是不同的语言,而不是C的版本).在向量向量示例中,
向量a(n,向量(m));
不需要循环。关于最后一个示例,由于VLA与C中的规则数组一样,通过第一个元素地址作为其值传递,因此将向量向量传递给
foo
的逻辑同义操作将通过引用。如文所述,它是通过值传递的。
for (int i = 0; i < n; i++){
    delete[] a[i];
    a[i] = 0;
}
delete[] a;
a = 0;
vector<vector<int>> a(n, vector<int>(m));
void foo(const vector<vector<int>>& a){
    size_t n = a.size();
    size_t m = 0;
    if (n > 0)
        m = a[0].size();
    // do your work
}
#include <vector>
#include <iostream>
#include <iomanip>
using namespace std;


//  function to pass 2d vector array by reference &
void function( int n, int m,  vector <vector<int> > & vec2DArray ) {

    for (int y=0; y<10; y++ ){
        for (int x=0; x<10; x++  ){

            // perform some calculations
            vec2DArray[y][x] = (y+1) * (x+1) *m *n;

        }
    }
}


int main() {
    cout<<"function to pass 2d vector array by reference & \n\n";

    // create a 2D vector of dimension [10][10]
    vector <vector<int> > vec2DArray( 10, vector <int> (10) );
    int n=0, int m=0;

    // call function, pass 2d vector array  by reference &
    function( 1, 1, vec2DArray );

    // display calculation results
    for (int y=0; y<10; y++ ){
        for (int x=0; x<10; x++  ){

            // display vec2DArray
            cout << setfill(' ') << setw(2)<< vec2DArray[y][x] <<" ";
        }  
        cout<<"\n";
    }
    cout<<"\n";


cout<<"Press ANY key to close.\n\n";
cin.ignore(); cin.get();
return 0;
}