相当于Matlab查找C数组的函数

时间:2011-09-19 20:41:31

标签: c search matlab

我需要C中的Matlab find函数(reference)等效于数组:

  

ind = find(X)定位数组X的所有非零元素,并返回   向量ind中那些元素的线性指数。如果X是行向量,   然后ind是一个行向量;否则,ind是列向量。如果是X.   不包含非零元素或是一个空数组,然后ind是一个   空数组。

一个琐碎的未经测试的例子:

#include <stdlib.h>
#include <time.h>
int main()
{
   /* Initialize variables */
   int x[25];
   int y[25];

   /* initialize random seed: */
   srand ( time(NULL) );

   /* Fill arrays with stuff */
   for (i=0;i<25;i++)
   {
      x[i] = rand();
      y[i] = rand();
   }

   /* Find */
   ind = find((x-y) > 0); // Need to figure out how to do this
   }
}

现在,由于项目限制,我不能使用像vector这样的Boost或C ++容器。

2 个答案:

答案 0 :(得分:1)

如果您被限制为“vanilla C”(从您的问题看来就是这种情况),没有内置的内容,您必须编写自己的此类函数版本。

但是,从我的示例中看到,您需要的内容与find函数不同,您希望找到与xy不同的元素。如果您努力获得灵活性,那么编写一个通用函数来检查两个数组上的给定谓词(作为函数指针传递)可能是个好主意。另一方面,因为在C中我们只有函数指针(而不是函子),性能可能会受到影响。

答案 1 :(得分:1)

这应该做一些接近你想要的事情 - 返回它在outArray中为你放置的非零元素的数量。呼叫签名不一样,但应该做你想要的。未经测试:)

size_t find(int *inArray, int *outArray, size_t arraySize)
{
  size_t numElements = 0;
  for(int i=0; i<arraySize; i++)
  {
    if(inArray[i])
    {
       outArray[numElements++] = inArray[i];
    }
  }

  return numElements;
}