C ++:如何将变量值/非常数值声明为2D矩阵/数组的维? Array [var1] [var2] = {...}

问题描述

我正在尝试在NodeMCU项目的一些用户定义的库(C ++)中使用几个2D矩阵/数组。我不知道声明/初始化之前的尺寸,而是需要通过代码的其他部分或有时是用户输入来计算尺寸。例如,矩阵

result[rw][2]={0}

尺寸'rw'​​是需要首先计算的变量。

就目前而言,我已经将尺寸全局声明为常量...

    #define const rw 4
    int main(){
....
    Array[rw][2] ={};
...
    }

或在我的main()函数中作为const int;效果很好。

int main(){
......
const int rw = 4;
int Array[rw][2] =.....;
......
}

但是我知道这不是解决方案。我已经阅读了一些建议使用指针或向量声明可变大小数组的文章

考虑到我的NODEMCU内存有限并且可能需要声明这些数组中的大约50个(正负),我想知道最好的方法是什么。

这是我在Codeblocks上运行的一段代码,作为证明的概念。

#include<iostream>
#include<cstdlib>
#define _USE_MATH_DEFInes
#include<cmath>
using namespace std;

// Some function prototypes
int factorial(int num);   // calculates n factorial
int n_choose_k(int n,int k); // calculates nCk

int main(){

    double x[2][4]={{0.8645,0.6273,0.4741,0.6507},{0.2447,0.3987,0.1651,5.0785e-04}};

    const int N = 4;
    //int const num_constraints = n_choose_k(N,2);
    const int num_constraints =6; 
        // I knew the value beforehand. But actually want to use the return value from n_choose_k(N,2)

    double A[num_constraints][2*N]={0};

//// Some calculations........//////
    int count = 0;
    for (int i=0;i<(N-1);i++){
        for(int j=i+1; j<N; j++){
            double sqSum=0;
            for(int rw=0; rw<2; rw++){
                double colDiff = x[rw][i]-x[rw][j];
                sqSum = sqSum + pow(colDiff,2);
                if(rw==0){
                    A[count][2*i] = -2*colDiff;
                    A[count][2*j] =  2*colDiff;
                }
                if(rw==1){
                    A[count][2*i+1] = -2*colDiff;
                    A[count][2*j+1] =  2*colDiff;
                }
            }
            double matnorm =sqrt(sqSum); //2-norm
            count = count + 1;
        }
    }
/////////////////////////////////////

    //Print matrix A
    cout<< "\nA:\n";
    for(int i=0;i<num_constraints;i++){
        for(int j=0;j<8;j++){
            cout<<A[i][j]<<"\t ";
        }
        cout<<"\n";
    }

return 0;
}

//func def.
int factorial(int num){
    int fact=1;
    for(int i=1;i<=num;i++)
        fact = fact*i;

return fact;
}

//func def.
int n_choose_k(int n,int k){
    int const nCk = factorial(n)/(factorial((n-k))*(factorial(k)));

return nCk;
}

代码可以很好地用作维度A矩阵/数组-N和num_constrainsts都声明为'const int'。但是,如果我想将n_choose_k(int n,int k)的返回值分配给num_constrainsts,那是行不通的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)