数组大小不知道怎么弄?

猫猫与橙子 2016-08-04 07:46:53
...全文
222 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
猫猫与橙子 2016-08-06
  • 打赏
  • 举报
回复
谢谢大家的帮助,我已经调试通过;方法如下:
    const int nsample = traindata.rows;
   const  int nexpression = img->nexpression;
    int lengthvector = traindata.cols;
    Mat weight(nexpression, lengthvector, CV_32F);
    //weight = weight;

     vector<vector<int>> labelmatrix(nsample,vector<int>(nexpression));
     for (int n = 0; n<nsample; n++)
    {
        for (int j = 0; j<nexpression; j++)
        {
            labelmatrix[n][j] = 0.0;
        }
        labelmatrix[n][trainlabels.at<int>(n)] = 1;
    }
这样利用vector<vector<int>>就可以了!这里用的是C++里面的容器。
paschen 版主 2016-08-05
  • 打赏
  • 举报
回复
栈上数组的大小需在编译时就能确定,不能是变量,如果需要可以在堆上动态分配内存
小灸舞 2016-08-05
  • 打赏
  • 举报
回复
用new动态分配
joyjoyjoy1992 2016-08-05
  • 打赏
  • 举报
回复
使用vector最好了
lm_whales 2016-08-05
  • 打赏
  • 举报
回复
1)启用C99,C11 编译,如果不支持,改为动态分配 2)vector 很胜任这种动态数组的工作 3)const ,乃至 constexpr 都不能确定一定是 ,常量表达式 只有用常量表达式初始化的才是。
赵4老师 2016-08-05
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int **newarr2d(int rows,int cols) {
    int **p,i;

    p=(int **)malloc(rows*sizeof(int *));
    if (NULL==p) exit(1);
    for (i=0;i<rows;i++) {
        p[i]=(int *)malloc(cols*sizeof(int));
        if (NULL==p[i]) exit(1);
    }
    return p;
}
void deletearr2d(int **p,int rows) {
    int i;

    for (i=0;i<rows;i++) {
        free(p[i]);
    }
    free(p);
}
int main() {
    int **arr2d,i,j,r,c;

    r=4;
    c=5;
    //在堆中开辟一个4×5的二维int数组
    arr2d=newarr2d(r,c);
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            arr2d[i][j]=i*c+j;
        }
    }
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            printf(" %2d",arr2d[i][j]);
        }
        printf("\n");
    }
    deletearr2d(arr2d,r);

    r=6;
    c=3;
    //在堆中开辟一个6×3的二维int数组
    arr2d=newarr2d(r,c);
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            arr2d[i][j]=i*c+j;
        }
    }
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            printf(" %2d",arr2d[i][j]);
        }
        printf("\n");
    }
    deletearr2d(arr2d,r);

    return 0;
}
//  0  1  2  3  4
//  5  6  7  8  9
// 10 11 12 13 14
// 15 16 17 18 19
//  0  1  2
//  3  4  5
//  6  7  8
//  9 10 11
// 12 13 14
// 15 16 17
//
猫猫与橙子 2016-08-05
  • 打赏
  • 举报
回复
我采用了vector<vector<int>>这种方法,然后就不报错了,不知道效果怎么样,还在调试中。
赵4老师 2016-08-05
  • 打赏
  • 举报
回复
alloc mallco、realloc、free
猫猫与橙子 2016-08-04
  • 打赏
  • 举报
回复
画红线的地方出了问题,用宏定义也不知道怎么加,请问一下大家,这个应该怎么办?

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧