Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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++计算矩阵行列式: int pw(int a){ if(a%2==0)return 1;else return -1; } float det(vector<vector<float> > &arr, int rows){ vector<vector<float> > arr2; float dett=0,hk; if(rows==2){ dett= (arr[0][0]*arr[1][1]-arr[0][1]*arr[1][0]); } else { for(int i=0;i<rows;i++){ hk=arr[0][i];arr2=arr; arr2.erase(arr2.begin()); for(int k=0;k<rows-1;k++)arr2[k].erase(arr2[k].begin()+i); dett=dett+pw(i)*hk*det(arr2,rows-1); } } return dett; }_C#_C++ - Fatal编程技术网

C+中使用递归的矩阵行列式+;和C# 使用C++计算矩阵行列式: int pw(int a){ if(a%2==0)return 1;else return -1; } float det(vector<vector<float> > &arr, int rows){ vector<vector<float> > arr2; float dett=0,hk; if(rows==2){ dett= (arr[0][0]*arr[1][1]-arr[0][1]*arr[1][0]); } else { for(int i=0;i<rows;i++){ hk=arr[0][i];arr2=arr; arr2.erase(arr2.begin()); for(int k=0;k<rows-1;k++)arr2[k].erase(arr2[k].begin()+i); dett=dett+pw(i)*hk*det(arr2,rows-1); } } return dett; }

C+中使用递归的矩阵行列式+;和C# 使用C++计算矩阵行列式: int pw(int a){ if(a%2==0)return 1;else return -1; } float det(vector<vector<float> > &arr, int rows){ vector<vector<float> > arr2; float dett=0,hk; if(rows==2){ dett= (arr[0][0]*arr[1][1]-arr[0][1]*arr[1][0]); } else { for(int i=0;i<rows;i++){ hk=arr[0][i];arr2=arr; arr2.erase(arr2.begin()); for(int k=0;k<rows-1;k++)arr2[k].erase(arr2[k].begin()+i); dett=dett+pw(i)*hk*det(arr2,rows-1); } } return dett; },c#,c++,C#,C++,arr2=arr语句在两种语言中执行不同的操作 在C++中,它复制数据,以便对 ARR2的更改不会改变 ARR < /代码> .< 在C#中,此作业将更新arr2所指内容,而无需复制。因此,对arr2的更改也将更改arr。您需要显式复制arr的arr2=arr语句在两种语言中执行不同的操作 在C++中,它复制数据,以便对 ARR2的更改不会改变 ARR < /代码> .< 在C#中,此作业将更新arr2所指内容,而无需复制。因此,对arr2的更改也将更改arr。您需要显式复制arr 我检查循环到

arr2=arr语句在两种语言中执行不同的操作

在C++中,它复制数据,以便对<代码> ARR2的更改不会改变<代码> ARR < /代码> .<


在C#中,此作业将更新
arr2
所指内容,而无需复制。因此,对
arr2
的更改也将更改
arr
。您需要显式复制
arr
arr2=arr语句在两种语言中执行不同的操作

在C++中,它复制数据,以便对<代码> ARR2的更改不会改变<代码> ARR < /代码> .< 在C#中,此作业将更新

arr2
所指内容,而无需复制。因此,对
arr2
的更改也将更改
arr
。您需要显式复制
arr

我检查循环到达I=1时,递归开始时,“arr”不相同

是的,这是因为您使用的是不复制列表的
arr2=arr
arr2
仍然是对
arr
的引用。您可以做的是
arr2=新列表(arr)
创建包含
arr
元素的新列表

编辑 要在列表中复制列表,可以执行以下操作。
arr2=新列表(arr.Select(x=>newlist(x))

我检查循环到达I=1时,递归开始时,“arr”不相同

是的,这是因为您使用的是不复制列表的
arr2=arr
arr2
仍然是对
arr
的引用。您可以做的是
arr2=新列表(arr)
创建包含
arr
元素的新列表

编辑 要在列表中复制列表,可以执行以下操作。
arr2=新列表(arr.Select(x=>newlist(x))

“不工作”不是对问题的有用描述为什么要先使用
后使用
。只需执行
arr[0][0]
。另外,最后< /Cord>不一定是C++代码中寻找的第二个项目。@ JuHARR语句由计数检查来保护。“所以C?S.吸吮?或者我的代码中有什么错误?”因为您说“但是在C中它不工作。”只留下一个结论……“ARR假设不改变,但是递归开始时它是变化的。”如果执行此操作并对
arr2
进行更改,则会更改
arr
,因为您不复制矩阵,而只将引用分配给它。两个元素仍然指向同一个对象!另外,如果递归开始,那么您有一个不同的对象,它的行数比您传递到递归调用的行数少一行,那么您为什么想知道,“不工作”不是一个问题的有用描述,为什么您要使用
First
Last
。只需执行
arr[0][0]
。另外,最后< /Cord>不一定是C++代码中寻找的第二个项目。@ JuHARR语句由计数检查来保护。“所以C?S.吸吮?或者我的代码中有什么错误?”因为您说“但是在C中它不工作。”只留下一个结论……“ARR假设不改变,但是递归开始时它是变化的。”如果执行此操作并对
arr2
进行更改,则会更改
arr
,因为您不复制矩阵,而只将引用分配给它。两个元素仍然指向同一个对象!同样,如果递归开始,那么您有一个不同的对象,它的行数比您传入递归调用的行数少一行,那么您为什么会感到奇怪呢?这似乎是正确的。但是,当我不能在c#中使用“=”时,我究竟如何制作副本?这似乎是正确的。但是,当我不能在c#中使用“=”时,我究竟如何制作副本?就像你说的,当使用new时,它保持delete arr。这是不可能的@minh你是什么意思?你还必须在
foreach
中复制
k
。复制列表内部的简单方法就是这样做<代码>arr2=新列表(arr.Select(x=>新列表(x))好的。它起作用了。多谢各位。但老实说,现在我开始讨厌C了如你所说,当使用新功能时,它会保持删除arr。这是不可能的@minh你是什么意思?你还必须在
foreach
中复制
k
。复制列表内部的简单方法就是这样做<代码>arr2=新列表(arr.Select(x=>新列表(x))好的。它起作用了。多谢各位。但老实说,现在我开始讨厌C了
    int pw(int a)
    {
        if (a % 2 == 0) return 1; else return -1;
    }
    double det(List<List<double>> arr)
    {

        int rows = arr.Count;
        List<List<double>> arr2;
        double dett = 0, hk;
        if (rows == 2)
        {
            dett = (arr.First().First() * arr.Last().Last() - arr.First().Last() * arr.Last().First());
        }
        else
        {
            for (int i = 0; i < arr.Count; i++)
            {
                hk = arr[0][i]; arr2 = arr;
                arr2.RemoveAt(0);
                foreach (List<double> k in arr2) k.RemoveAt(i);
                dett = dett + pw(i) * hk * det(arr2);
            }
        }
        return dett;
    }