我需要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 ++容器。
答案 0 :(得分:1)
如果您被限制为“vanilla C”(从您的问题看来就是这种情况),没有内置的内容,您必须编写自己的此类函数版本。
但是,从我的示例中看到,您需要的内容与find
函数不同,您希望找到与x
和y
不同的元素。如果您努力获得灵活性,那么编写一个通用函数来检查两个数组上的给定谓词(作为函数指针传递)可能是个好主意。另一方面,因为在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;
}