1

マトリックスに列を段階的に追加する必要がある for ループがあります。行のサイズは for ループに入る前にわかっていますが、列のサイズは条件によって異なります。次のコードは状況を示しています。

  N = getFeatureVectorSize();
  float **fmat; // N rows, dynamic number of cols     
  for(size_t i = 0; i < getNoObjects(); i++)
  {
    if(Object[i] == TARGET_OBJECT)
    {
      float *fv = new float[N];
      getObjectFeatureVector(fv);    
      // How to add fv to fmat?
    }
  }

編集1これは私が一時的に問題を解決した方法です:

  N = getFeatureVectorSize();
  float *fv = new float[N];
  float *fmat = NULL;
  int col_counter = 0;
  for(size_t i = 0; i < getNoObjects(); i++)
  {
    if(Object[i] == TARGET_OBJECT)
    {
      getObjectFeatureVector(fv);    
      fmat = (float *) realloc(fmat, (col_counter+1)*N*sizeof(float));
      for(int r=0; r<N; r++) fmat[col_counter*N+r] = fv[r];
      col_counter++;
    }
  }
  delete [] fv;
  free(fmat);

ただし、C/C++ で 2 次元配列のメモリを段階的に割り当てる方法をまだ探しています。

4

4 に答える 4